{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "使用tensorflow2.0和LSTM的文本多分类2.ipynb",
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "h1RDtYkDS6xf",
        "colab_type": "text"
      },
      "source": [
        "之前我给大家介绍过一篇使用keras和LSTM来进行文本多分类的博客 ,今天我将在google提供的Colab notebook上使用tensorflow2.0来是实现以下中文文本多分类的实战应用。选择Colab notebook是因为在Colab notebook中google提供了免费的GPU资源供你使用，这样可以大大节省模型的训练时间。\n",
        "\n",
        "Google Colab，全名Colaboratory，是由谷歌提供的免费的云平台，可以使用keras、tensorflow等框架进行深度学习。最近Colab平台已经将K80 GPU更换成Tesla T4 GPU，提供了更强的算力。对于刚入门机器学习或深度学习的用户，这个平台是不二之选。\n",
        "\n",
        "要使用Google Colab必须要在科学上网的环境下，同时必须要有一个gmail账号，还没有gmail账号的同学请赶快注册一个吧。\n",
        "\n",
        "如何使用colab请看这篇博客（https://www.cnblogs.com/lfri/p/10471852.html）\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "FPUUPF3jtmJ4",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "%matplotlib inline\n",
        "import pandas as pd\n",
        "import matplotlib\n",
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "from sklearn.model_selection import train_test_split\n",
        "import jieba as jb\n",
        "import re"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "8rrMjRf4tsaM",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "#如果还没有安装tensorflow2.0,请使用下面的命令安装tensorflow\n",
        "#!pip install tensorflow==2.0.0"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "2DUMMJaxY87-",
        "colab_type": "text"
      },
      "source": [
        "# 数据"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "nylC15sMtwsD",
        "colab_type": "code",
        "outputId": "1f0e0292-be50-4950-f480-055b905cd501",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "import tensorflow as tf\n",
        "from tensorflow.keras.preprocessing.text import Tokenizer\n",
        "from tensorflow.keras.preprocessing.sequence import pad_sequences\n",
        "print(tf.__version__)"
      ],
      "execution_count": 3,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "2.0.0\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "cOFAjwEGtyG0",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# #加载google的云端硬盘\n",
        "from google.colab import drive\n",
        "drive.mount('/content/drive')"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "mcN17j6OtyMK",
        "colab_type": "code",
        "outputId": "f6a5919d-2ed4-4fc8-f422-dda7c96394ed",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 377
        }
      },
      "source": [
        "df = pd.read_csv('./drive/My Drive/data/online_shopping_10_cats.csv')\n",
        "print(\"数据总量: %d .\" % len(df))\n",
        "df.sample(10)"
      ],
      "execution_count": 79,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "数据总量: 62774 .\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>cat</th>\n",
              "      <th>label</th>\n",
              "      <th>review</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>20435</th>\n",
              "      <td>水果</td>\n",
              "      <td>1</td>\n",
              "      <td>这次购物不满意，有焉了的，感觉不怎么有水分，早知道不如直接去市场买，你们可以看看，物流给5星...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>47539</th>\n",
              "      <td>衣服</td>\n",
              "      <td>0</td>\n",
              "      <td>一般般，不咋的这衣服</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>43047</th>\n",
              "      <td>衣服</td>\n",
              "      <td>1</td>\n",
              "      <td>宝贝收到，衣服和描述的一样，服务很好，物流很快，大小合适。</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>44821</th>\n",
              "      <td>衣服</td>\n",
              "      <td>0</td>\n",
              "      <td>不满意，与图片相差不多，太丑了。我都要求退货了，但是这么多天理都没人理。建议各位网友慎买这家货。</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>17004</th>\n",
              "      <td>水果</td>\n",
              "      <td>1</td>\n",
              "      <td>还可以啊，只是这阵价格比前面贵</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>60250</th>\n",
              "      <td>酒店</td>\n",
              "      <td>0</td>\n",
              "      <td>房间隔音出奇的差，从来没有住过隔音这么差的酒店，左右隔壁房间的电视、说话声音，过道里的声音在...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>46321</th>\n",
              "      <td>衣服</td>\n",
              "      <td>0</td>\n",
              "      <td>衣服真垃圾。。。。。</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>36090</th>\n",
              "      <td>洗发水</td>\n",
              "      <td>0</td>\n",
              "      <td>特别不好用，用完头发头皮发油发尾枯</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8515</th>\n",
              "      <td>平板</td>\n",
              "      <td>1</td>\n",
              "      <td>清晰度高，声音好听，速度快，支持国产</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>48332</th>\n",
              "      <td>衣服</td>\n",
              "      <td>0</td>\n",
              "      <td>衣服还可以，不过选的这家物流我真无语，货不给我送到地方不说，弄个存放点，第二天去取还跟我收费...</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "       cat  label                                             review\n",
              "20435   水果      1  这次购物不满意，有焉了的，感觉不怎么有水分，早知道不如直接去市场买，你们可以看看，物流给5星...\n",
              "47539   衣服      0                                         一般般，不咋的这衣服\n",
              "43047   衣服      1                      宝贝收到，衣服和描述的一样，服务很好，物流很快，大小合适。\n",
              "44821   衣服      0   不满意，与图片相差不多，太丑了。我都要求退货了，但是这么多天理都没人理。建议各位网友慎买这家货。\n",
              "17004   水果      1                                    还可以啊，只是这阵价格比前面贵\n",
              "60250   酒店      0  房间隔音出奇的差，从来没有住过隔音这么差的酒店，左右隔壁房间的电视、说话声音，过道里的声音在...\n",
              "46321   衣服      0                                         衣服真垃圾。。。。。\n",
              "36090  洗发水      0                                  特别不好用，用完头发头皮发油发尾枯\n",
              "8515    平板      1                                 清晰度高，声音好听，速度快，支持国产\n",
              "48332   衣服      0  衣服还可以，不过选的这家物流我真无语，货不给我送到地方不说，弄个存放点，第二天去取还跟我收费..."
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 79
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "g6B5Pc0gtyVg",
        "colab_type": "code",
        "outputId": "b2dbe183-d5bf-43a5-de1b-5d2266226817",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 359
        }
      },
      "source": [
        "df[[\"cat\"]].drop_duplicates().reset_index(drop=True)"
      ],
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>cat</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>书籍</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>平板</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>手机</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>水果</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>洗发水</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>热水器</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>蒙牛</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>衣服</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>计算机</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>酒店</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   cat\n",
              "0   书籍\n",
              "1   平板\n",
              "2   手机\n",
              "3   水果\n",
              "4  洗发水\n",
              "5  热水器\n",
              "6   蒙牛\n",
              "7   衣服\n",
              "8  计算机\n",
              "9   酒店"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 6
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "x6W-Tq9utyfS",
        "colab_type": "code",
        "outputId": "a12d4df7-5950-4703-c9e8-c476d17c3974",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 431
        }
      },
      "source": [
        "print(df.cat.value_counts())\n",
        "print()\n",
        "print(df.cat.value_counts()/len(df));\n"
      ],
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "酒店     10000\n",
            "水果     10000\n",
            "平板     10000\n",
            "洗发水    10000\n",
            "衣服     10000\n",
            "计算机     3992\n",
            "书籍      3851\n",
            "手机      2323\n",
            "蒙牛      2033\n",
            "热水器      575\n",
            "Name: cat, dtype: int64\n",
            "\n",
            "酒店     0.159302\n",
            "水果     0.159302\n",
            "平板     0.159302\n",
            "洗发水    0.159302\n",
            "衣服     0.159302\n",
            "计算机    0.063593\n",
            "书籍     0.061347\n",
            "手机     0.037006\n",
            "蒙牛     0.032386\n",
            "热水器    0.009160\n",
            "Name: cat, dtype: float64\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "7t8RNhVctylV",
        "colab_type": "code",
        "outputId": "73e54477-b7c6-410e-fb70-4d6d0b4c488c",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 127
        }
      },
      "source": [
        "df[df.cat=='平板'][[\"review\"]].sample(5).values"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([['东西是给78岁爷爷买的，他用的特别方便，京东配送也特别快，总之，特别满意。老人主要以看电视剧，新闻为主，标准配置已经足够了，请大家参考。'],\n",
              "       ['从此再也不在京东买东西，呵呵14号下单，15号活动减300，问客服不理，好歹也给个理由回复把！申请保价说有赠品就不给保价。下单之后还给我说地址有问题不给送，要我取消订单。我以前买的东西你让鬼送过来的？虽然最后解决了，但是服务又慢又差。手机还行，但是劝大家别在这里买。本想到315投诉，但忙的都没时间。'],\n",
              "       ['第一次从京东买东西，真的好坑，客服都是些大夜。最重要的是差评怎么就提交不出去呢？'],\n",
              "       ['性能很不错。显示跟运行速度给力。支持国产芯！！！就是背后的弧形有点失望'],\n",
              "       ['前摄像头的像素不够清晰，拍了照片会有各种黑点，问了客服人员说不是质量问题。']], dtype=object)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 48
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "yqHg5N_jtyrh",
        "colab_type": "code",
        "outputId": "bcfde1d2-6f39-4629-8e51-8be437917e06",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 145
        }
      },
      "source": [
        "df[df.cat=='手机'][[\"review\"]].sample(5).values"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([['1、来电显示只显示对方的姓名而不显示号码，对方可能有几个号，这样就不知道是对方的哪一个电话号码打来的？应该显示姓名+电话号码！2、我每天都要从名片夹中查找很多联系人的号码，而且他们的号码大多是长途的，所以我都是从手机中找到了再用办公室的座机拨打，因为使用次数频繁，所以使用名片夹中的查找功能很麻烦，如果通过语音拨号呼叫并且能停留在该联系人的名片资料上不直接拨打就好了，摩托A780这一点就做得比较好。'],\n",
              "       ['排线容易坏我已经换了几次了啊！而且售后服务特别差'],\n",
              "       ['我用了两个月，除了时间不太准之外没什么性能上的毛病。我满意的是屏幕的大小和颜色以及自动开关机的功能。'],\n",
              "       ['色彩明亮，对比度好，通话质量高'],\n",
              "       ['不错，功能很全，D盘下有7兆呢，可是短信满了，也只能望卡兴叹！其他都不错，有三个闹钟，阴历，等等！']],\n",
              "      dtype=object)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 49
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "sPOH8zjAtyx2",
        "colab_type": "code",
        "outputId": "96525168-7605-4b63-a12f-a0b1c8ff5986",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 145
        }
      },
      "source": [
        "df[df.cat=='酒店'][[\"review\"]].sample(5).values"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([['预定酒店很顺利。离西街较远，房间很有特色，古色古香，下次去阳朔再住这里'],\n",
              "       ['环境较差，马路噪音非常大，而且房间之间的隔音处理得不好，睡在床上能听到楼道里的讲话声。房间偏小。另外，离机场非常远。出租司机走外环线，说是速度快，但走了40多公里。饭店周围的环境很乱。'],\n",
              "       ['我是在全国雪灾时来到了仁安悦榕庄的，整个酒店就我们一个住户，酒店座落在藏民的村落中，与自然环境融为一体，我看到的是一个白色的童话世界，酒店工作人员及总经理何满先生都相当的亲切，怕大雪封山，酒店派了最好的藏族司机：扎西，第二天一早送我们回了丽江，而他自己连着就回香格里拉，等于要开一天的路（早上８点３０出发，他到晚上９点才到）而'],\n",
              "       ['订的是双人房,感觉房间有点小,放了两张床之后就没什么空间了,沙发也只有一个单人的.觉得最不好的是洗手间太太太小了 - 好挤,门拉直打开就到浴缸的边了.除了小的问题之外,房间还是很舒服的.自助早餐不错,很丰富,可惜吃不了多少...会所在酒店外面,觉得有点不方便. 有室内游泳池,去游泳还一定要求带游泳帽,最终没下水, 有点郁闷.'],\n",
              "       ['在这个酒店住过至少有四次，进行一下简单的评价：房间的面积比较大，够得上四星的标准，只是有些房间稍旧了点；房间的设施中规中矩，还行，电脑的上网速度还可以；卫生间的花瓣很欣赏，这一点相当不错；客房服务员的态度非常好，很欣赏；总体感觉较好，推荐！！！']],\n",
              "      dtype=object)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 50
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Qof3E4K5ty7Z",
        "colab_type": "code",
        "outputId": "f88f49f7-d4b8-4143-ebce-b283e6f9355d",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 125
        }
      },
      "source": [
        "df[df.cat=='衣服'][[\"review\"]].sample(5).values"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([['什么鬼东西，质量差，东西又发错，垃圾'],\n",
              "       ['白色打底衫，质量不错，便宜！！！！！！！！穿着舒服！！！'],\n",
              "       ['快递非常给力哦，昨天下单今天上午就到了，款式不错，大小正好，质量很好，非常满意'],\n",
              "       ['纯棉的，很不错。这个价格能买到纯棉很不错了'],\n",
              "       ['你*的就给我这样的裤子？特么的这是我在京东唯一一次买到烂东西，就你这家店，你老母的，老子准备过年穿的，滚你*，给你一星都奢侈']],\n",
              "      dtype=object)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 51
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ZiwexnALYtRX",
        "colab_type": "text"
      },
      "source": [
        "## 数据预处理\n",
        "\n",
        "下面我们要对评语进行一些预处理工作,这包括删除文本中的标点符号,特殊符号,还要删除一些无意义的常用词(stopword),因为这些词和符号对系统分析预测文本的内容没有任何帮助,反而会增加计算的复杂度和增加系统开销,所有在使用这些文本数据之前必须要将它们清理干净。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "f0GCA1OFty_U",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "#定义删除除字母,数字，汉字以外的所有符号的函数\n",
        "def remove_punctuation(line):\n",
        "    line = str(line)\n",
        "    if line.strip()=='':\n",
        "        return ''\n",
        "    rule = re.compile(u\"[^a-zA-Z0-9\\u4E00-\\u9FA5]\")\n",
        "    line = rule.sub('',line)\n",
        "    return line\n",
        " \n",
        "def stopwordslist(filepath):  \n",
        "    stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]  \n",
        "    return stopwords  \n",
        "\n",
        "#加载停用词\n",
        "stopwords = stopwordslist(\"./drive/My Drive/data/chineseStopWords.txt\")"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "j-lQ-HZ5ZYXf",
        "colab_type": "text"
      },
      "source": [
        "中文停用词包含了很多日常使用频率很高的常用词,如 吧，吗，呢，啥等一些感叹词等,这些高频常用词无法反应出文本的主要意思,所以要被过滤掉。\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "f7zcm7w1tzFH",
        "colab_type": "code",
        "outputId": "f765fafe-bf81-4318-e97c-316576801a5d",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 359
        }
      },
      "source": [
        "df['clean_review'] = df['review'].apply(remove_punctuation)\n",
        "df.sample(10)"
      ],
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>cat</th>\n",
              "      <th>label</th>\n",
              "      <th>review</th>\n",
              "      <th>clean_review</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>49320</th>\n",
              "      <td>计算机</td>\n",
              "      <td>1</td>\n",
              "      <td>外观有够炫，很漂亮，看着用着都舒心，爱不释手……悬浮键手感不错，性价比很高，跟其他牌子的本本...</td>\n",
              "      <td>外观有够炫很漂亮看着用着都舒心爱不释手悬浮键手感不错性价比很高跟其他牌子的本本放那一比啥都不...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>17530</th>\n",
              "      <td>水果</td>\n",
              "      <td>1</td>\n",
              "      <td>没有，前几次买的好总是，能遇到，里面是烂的</td>\n",
              "      <td>没有前几次买的好总是能遇到里面是烂的</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11575</th>\n",
              "      <td>平板</td>\n",
              "      <td>0</td>\n",
              "      <td>要的是通话版，发过的不能通话。问了几天客服，也不给解决。太气人了</td>\n",
              "      <td>要的是通话版发过的不能通话问了几天客服也不给解决太气人了</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6509</th>\n",
              "      <td>平板</td>\n",
              "      <td>1</td>\n",
              "      <td>好！非常满意！这速度点赞</td>\n",
              "      <td>好非常满意这速度点赞</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>44745</th>\n",
              "      <td>衣服</td>\n",
              "      <td>0</td>\n",
              "      <td>差劲，没法说了，压根没法穿</td>\n",
              "      <td>差劲没法说了压根没法穿</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>53023</th>\n",
              "      <td>酒店</td>\n",
              "      <td>1</td>\n",
              "      <td>本人于2008年6月5日入住该酒店标准间。装修很别致，设施也不错，前台服务很好。早餐品种不多...</td>\n",
              "      <td>本人于2008年6月5日入住该酒店标准间装修很别致设施也不错前台服务很好早餐品种不多但味道不...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1687</th>\n",
              "      <td>书籍</td>\n",
              "      <td>1</td>\n",
              "      <td>读南先生的书,就如同在迷雾中行走时突然看到前方有一个光亮在远远地牵引着你,让你心中为一之一振...</td>\n",
              "      <td>读南先生的书就如同在迷雾中行走时突然看到前方有一个光亮在远远地牵引着你让你心中为一之一振对于...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>30660</th>\n",
              "      <td>洗发水</td>\n",
              "      <td>1</td>\n",
              "      <td>清扬男士，夏天用特别好，去油腻，清爽</td>\n",
              "      <td>清扬男士夏天用特别好去油腻清爽</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>43144</th>\n",
              "      <td>衣服</td>\n",
              "      <td>1</td>\n",
              "      <td>宝贝已收到 质量不错 款式漂亮 做工精美 很满意的一次购物</td>\n",
              "      <td>宝贝已收到质量不错款式漂亮做工精美很满意的一次购物</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>16009</th>\n",
              "      <td>手机</td>\n",
              "      <td>0</td>\n",
              "      <td>1.通话时有些回音。2.外觀設計并无新意。3.反应速度太慢。4.摄像功能像个花花枕头，不实用...</td>\n",
              "      <td>1通话时有些回音2外觀設計并无新意3反应速度太慢4摄像功能像个花花枕头不实用拍的时候有水波纹...</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "       cat  ...                                       clean_review\n",
              "49320  计算机  ...  外观有够炫很漂亮看着用着都舒心爱不释手悬浮键手感不错性价比很高跟其他牌子的本本放那一比啥都不...\n",
              "17530   水果  ...                                 没有前几次买的好总是能遇到里面是烂的\n",
              "11575   平板  ...                       要的是通话版发过的不能通话问了几天客服也不给解决太气人了\n",
              "6509    平板  ...                                         好非常满意这速度点赞\n",
              "44745   衣服  ...                                        差劲没法说了压根没法穿\n",
              "53023   酒店  ...  本人于2008年6月5日入住该酒店标准间装修很别致设施也不错前台服务很好早餐品种不多但味道不...\n",
              "1687    书籍  ...  读南先生的书就如同在迷雾中行走时突然看到前方有一个光亮在远远地牵引着你让你心中为一之一振对于...\n",
              "30660  洗发水  ...                                    清扬男士夏天用特别好去油腻清爽\n",
              "43144   衣服  ...                          宝贝已收到质量不错款式漂亮做工精美很满意的一次购物\n",
              "16009   手机  ...  1通话时有些回音2外觀設計并无新意3反应速度太慢4摄像功能像个花花枕头不实用拍的时候有水波纹...\n",
              "\n",
              "[10 rows x 4 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 9
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "-p7sqWxKadqn",
        "colab_type": "text"
      },
      "source": [
        "我们过滤掉了review中的标点符号和一些特殊符号，并生成了一个新的字段 clean_review。接下来我们要在clean_review的基础上进行分词,把每个评论内容分成由空格隔开的一个一个单独的词语。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Gy0f4q63tzL1",
        "colab_type": "code",
        "outputId": "3ea76f1c-87ee-46c4-93a1-5cc013b8de1c",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 361
        }
      },
      "source": [
        "#分词，并过滤停用词\n",
        "df['cut_review'] = df['clean_review'].apply(lambda x: \" \".join([w for w in list(jb.cut(x)) if w not in stopwords]))\n",
        "df.head()"
      ],
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Building prefix dict from the default dictionary ...\n",
            "Dumping model to file cache /tmp/jieba.cache\n",
            "Loading model cost 0.776 seconds.\n",
            "Prefix dict has been built successfully.\n"
          ],
          "name": "stderr"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>cat</th>\n",
              "      <th>label</th>\n",
              "      <th>review</th>\n",
              "      <th>clean_review</th>\n",
              "      <th>cut_review</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>书籍</td>\n",
              "      <td>1</td>\n",
              "      <td>﻿做父母一定要有刘墉这样的心态，不断地学习，不断地进步，不断地给自己补充新鲜血液，让自己保持...</td>\n",
              "      <td>做父母一定要有刘墉这样的心态不断地学习不断地进步不断地给自己补充新鲜血液让自己保持一颗年轻的...</td>\n",
              "      <td>做 父母 一定 刘墉 心态 不断 学习 不断 进步 不断 补充 新鲜血液 保持 一颗 年轻 ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>书籍</td>\n",
              "      <td>1</td>\n",
              "      <td>作者真有英国人严谨的风格，提出观点、进行论述论证，尽管本人对物理学了解不深，但是仍然能感受到...</td>\n",
              "      <td>作者真有英国人严谨的风格提出观点进行论述论证尽管本人对物理学了解不深但是仍然能感受到真理的火...</td>\n",
              "      <td>作者 真有 英国人 严谨 风格 提出 观点 进行 论述 论证 物理学 了解 不深 仍然 感受...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>书籍</td>\n",
              "      <td>1</td>\n",
              "      <td>作者长篇大论借用详细报告数据处理工作和计算结果支持其新观点。为什么荷兰曾经县有欧洲最高的生产...</td>\n",
              "      <td>作者长篇大论借用详细报告数据处理工作和计算结果支持其新观点为什么荷兰曾经县有欧洲最高的生产率...</td>\n",
              "      <td>作者 长篇大论 借用 详细 报告 数据处理 工作 计算结果 支持 其新 观点 荷兰 曾经 县...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>书籍</td>\n",
              "      <td>1</td>\n",
              "      <td>作者在战几时之前用了＂拥抱＂令人叫绝．日本如果没有战败，就有会有美军的占领，没胡官僚主义的延...</td>\n",
              "      <td>作者在战几时之前用了拥抱令人叫绝日本如果没有战败就有会有美军的占领没胡官僚主义的延续没有战后...</td>\n",
              "      <td>作者 战 之前 拥抱 令人 叫绝 日本 没有 战败 会 美军 占领 没胡 官僚主义 延续 没...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>书籍</td>\n",
              "      <td>1</td>\n",
              "      <td>作者在少年时即喜阅读，能看出他精读了无数经典，因而他有一个庞大的内心世界。他的作品最难能可贵...</td>\n",
              "      <td>作者在少年时即喜阅读能看出他精读了无数经典因而他有一个庞大的内心世界他的作品最难能可贵的有两...</td>\n",
              "      <td>作者 少年 时即 喜 阅读 看出 精读 无数 经典 一个 庞大 内心世界 作品 难能可贵 两...</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "  cat  ...                                         cut_review\n",
              "0  书籍  ...  做 父母 一定 刘墉 心态 不断 学习 不断 进步 不断 补充 新鲜血液 保持 一颗 年轻 ...\n",
              "1  书籍  ...  作者 真有 英国人 严谨 风格 提出 观点 进行 论述 论证 物理学 了解 不深 仍然 感受...\n",
              "2  书籍  ...  作者 长篇大论 借用 详细 报告 数据处理 工作 计算结果 支持 其新 观点 荷兰 曾经 县...\n",
              "3  书籍  ...  作者 战 之前 拥抱 令人 叫绝 日本 没有 战败 会 美军 占领 没胡 官僚主义 延续 没...\n",
              "4  书籍  ...  作者 少年 时即 喜 阅读 看出 精读 无数 经典 一个 庞大 内心世界 作品 难能可贵 两...\n",
              "\n",
              "[5 rows x 5 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 10
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Jh5CMc8DdNPx",
        "colab_type": "text"
      },
      "source": [
        "# 建模\n",
        "\n",
        " 首先我们要数据集中拆分出训练集和验证集,我们将80%的数据作为训练集,20%的数据作为验证集，我们通过分层抽样的方式来随机抽样，注意在这里我们使用了sklearn的train_test_split的方法来抽样,并使用了stratify参数来保证抽样后,训练集和验证集中的各个类目的占比与原数据集保持一致。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "1X_6PoqUtzQr",
        "colab_type": "code",
        "outputId": "94732fd8-5ca7-43e1-a530-00319f1acb17",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 53
        }
      },
      "source": [
        "#拆分训练集和测试集\n",
        "X_train, X_validation, Y_train, Y_validation = train_test_split(df[['cut_review']],df[[\"cat\"]], test_size = 0.2,stratify=df.cat)\n",
        "print(len(X_train))\n",
        "print(len(X_validation))"
      ],
      "execution_count": 21,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "50219\n",
            "12555\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "acL0ARkztzJv",
        "colab_type": "code",
        "outputId": "ba40081b-222b-41b2-905a-c80748000633",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 215
        }
      },
      "source": [
        "Y_train.cat.value_counts()/len(Y_train)"
      ],
      "execution_count": 22,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "酒店     0.159302\n",
              "水果     0.159302\n",
              "平板     0.159302\n",
              "洗发水    0.159302\n",
              "衣服     0.159302\n",
              "计算机    0.063601\n",
              "书籍     0.061351\n",
              "手机     0.036998\n",
              "蒙牛     0.032378\n",
              "热水器    0.009160\n",
              "Name: cat, dtype: float64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 22
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "AxRMq888hBY2",
        "colab_type": "code",
        "outputId": "7b21bfc1-831a-46e7-ce8e-c6a36feee4b1",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 215
        }
      },
      "source": [
        "Y_validation.cat.value_counts()/len(Y_validation)"
      ],
      "execution_count": 23,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "酒店     0.159299\n",
              "水果     0.159299\n",
              "平板     0.159299\n",
              "洗发水    0.159299\n",
              "衣服     0.159299\n",
              "计算机    0.063560\n",
              "书籍     0.061330\n",
              "手机     0.037037\n",
              "蒙牛     0.032417\n",
              "热水器    0.009160\n",
              "Name: cat, dtype: float64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 23
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "3dADGUfptzDB",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "\n",
        "vocab_size = 5000\n",
        "embedding_dim = 64\n",
        "max_length = 150\n",
        "trunc_type = 'post'\n",
        "padding_type = 'post'\n",
        "oov_tok = '<OOV>'"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "IeTTZ3SSty4S",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "tokenizer = Tokenizer(num_words = vocab_size, oov_token=oov_tok)\n",
        "tokenizer.fit_on_texts(X_train.cut_review.values)\n",
        "word_index = tokenizer.word_index\n",
        "reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "RZeoOr-Sty12",
        "colab_type": "code",
        "outputId": "69fa2f96-3293-49e9-fe4c-8dd5a3e6e426",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 233
        }
      },
      "source": [
        "print(len(list(word_index.items())))\n",
        "print()\n",
        "list(word_index.items())[:10]"
      ],
      "execution_count": 26,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "62476\n",
            "\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[('<OOV>', 1),\n",
              " ('买', 2),\n",
              " ('不错', 3),\n",
              " ('没有', 4),\n",
              " ('酒店', 5),\n",
              " ('京东', 6),\n",
              " ('说', 7),\n",
              " ('房间', 8),\n",
              " ('一个', 9),\n",
              " ('感觉', 10)]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 26
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "S0nOSGtknai-",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        ""
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "vRDmrC4mtyvS",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "X_train_sequences = tokenizer.texts_to_sequences(X_train.cut_review.values)\n",
        "X_train_padded = pad_sequences(X_train_sequences, maxlen=max_length, padding=padding_type, truncating=trunc_type)\n",
        "\n",
        "X_validation_sequences = tokenizer.texts_to_sequences(X_validation.cut_review.values)\n",
        "X_validation_padded = pad_sequences(X_validation_sequences, maxlen=max_length, padding=padding_type, truncating=trunc_type)\n",
        "\n"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "WtWvvR0-nx35",
        "colab_type": "code",
        "outputId": "55dc433d-6d49-4f94-d3f4-ab08859f6336",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 305
        }
      },
      "source": [
        "index = 10 \n",
        "print(X_train.cut_review.values[index])\n",
        "print()\n",
        "print(X_train_sequences[index])\n",
        "print()\n",
        "X_train_padded[index]\n"
      ],
      "execution_count": 30,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "发货 慢 到货 长成 京东 应该 佳农 更 应该\n",
            "\n",
            "[162, 246, 356, 1, 6, 76, 1, 109, 76]\n",
            "\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([162, 246, 356,   1,   6,  76,   1, 109,  76,   0,   0,   0,   0,\n",
              "         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
              "         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
              "         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
              "         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
              "         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
              "         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
              "         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
              "         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
              "         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
              "         0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n",
              "         0,   0,   0,   0,   0,   0,   0], dtype=int32)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 30
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "_FXrRWfC03aP",
        "colab_type": "code",
        "outputId": "f8fbce21-665d-46b1-b325-9b16430541c5",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 125
        }
      },
      "source": [
        "print(\"104 ->\",reverse_word_index[104])\n",
        "print(\"3 ->\",reverse_word_index[3])\n",
        "print(\"120 ->\",reverse_word_index[120])\n",
        "print()\n",
        "print(\"贴身 ->\",dict(list(word_index.items()))[\"贴身\"])\n",
        "print(\"1 ->\",reverse_word_index[1])\n"
      ],
      "execution_count": 31,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "104 -> 超市\n",
            "3 -> 不错\n",
            "120 -> 送货\n",
            "\n",
            "贴身 -> 7472\n",
            "1 -> <OOV>\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "SlB4ZWettypJ",
        "colab_type": "code",
        "outputId": "9b2f7a4c-e3b7-484f-91ea-8b17d91f87fe",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 125
        }
      },
      "source": [
        "label_tokenizer = Tokenizer()\n",
        "label_tokenizer.fit_on_texts(df.cat.values)\n",
        "\n",
        "Y_training_cat_seq = np.array(label_tokenizer.texts_to_sequences(Y_train.cat.values))\n",
        "Y_validation_cat_seq = np.array(label_tokenizer.texts_to_sequences(Y_validation.cat.values))\n",
        "\n",
        "label_word_index = label_tokenizer.word_index\n",
        "\n",
        "print(dict(list(label_word_index.items())))\n",
        "print(Y_training_cat_seq.shape)\n",
        "print()\n",
        "print(Y_training_cat_seq[0])\n",
        "print(Y_training_cat_seq[1])\n",
        "print(Y_training_cat_seq[2])\n"
      ],
      "execution_count": 32,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "{'平板': 1, '水果': 2, '洗发水': 3, '衣服': 4, '酒店': 5, '计算机': 6, '书籍': 7, '手机': 8, '蒙牛': 9, '热水器': 10}\n",
            "(50219, 1)\n",
            "\n",
            "[9]\n",
            "[2]\n",
            "[1]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "0wIz-Yt5tyjS",
        "colab_type": "code",
        "outputId": "10c1f419-4320-475d-8888-f867d9f1a04b",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 91
        }
      },
      "source": [
        "reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])\n",
        "\n",
        "def decode_article(text):\n",
        "    return ' '.join([reverse_word_index.get(i, '?') for i in text])\n",
        "print(decode_article(X_train_padded[0]))\n",
        "print('------------------------------------------------')\n",
        "print(X_train.cut_review.values[0])"
      ],
      "execution_count": 33,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "喜欢 蒙牛 <OOV> 你好 <OOV> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\n",
            "------------------------------------------------\n",
            "喜欢 蒙牛 雀巢 你好 那口儿\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "q0gFILf3tycD",
        "colab_type": "code",
        "outputId": "9a76b112-dca1-4e51-9c94-7f74c77c0b7d",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 305
        }
      },
      "source": [
        "model = tf.keras.Sequential([\n",
        "    \n",
        "    tf.keras.layers.Embedding(vocab_size, embedding_dim),\n",
        "    tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(embedding_dim)),\n",
        "    tf.keras.layers.Dense(embedding_dim, activation='relu'),\n",
        "    tf.keras.layers.Dense(11, activation='softmax')\n",
        "])\n",
        "model.summary()"
      ],
      "execution_count": 34,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"sequential\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "embedding (Embedding)        (None, None, 64)          320000    \n",
            "_________________________________________________________________\n",
            "bidirectional (Bidirectional (None, 128)               66048     \n",
            "_________________________________________________________________\n",
            "dense (Dense)                (None, 64)                8256      \n",
            "_________________________________________________________________\n",
            "dense_1 (Dense)              (None, 11)                715       \n",
            "=================================================================\n",
            "Total params: 395,019\n",
            "Trainable params: 395,019\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "p3NBM_CptyY7",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "4xf9ROmaxJS9",
        "colab_type": "code",
        "outputId": "33d242c2-c40f-4d1f-a41d-345b387aecbd",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 395
        }
      },
      "source": [
        "num_epochs = 10\n",
        "history = model.fit(X_train_padded, \n",
        "                    Y_training_cat_seq, \n",
        "                    epochs=num_epochs, \n",
        "                    validation_data=(X_validation_padded, Y_validation_cat_seq), \n",
        "                    verbose=2)"
      ],
      "execution_count": 36,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Train on 50219 samples, validate on 12555 samples\n",
            "Epoch 1/10\n",
            "50219/50219 - 216s - loss: 0.7027 - accuracy: 0.7567 - val_loss: 0.4106 - val_accuracy: 0.8660\n",
            "Epoch 2/10\n",
            "50219/50219 - 213s - loss: 0.3249 - accuracy: 0.8889 - val_loss: 0.3653 - val_accuracy: 0.8764\n",
            "Epoch 3/10\n",
            "50219/50219 - 213s - loss: 0.2682 - accuracy: 0.9081 - val_loss: 0.3600 - val_accuracy: 0.8794\n",
            "Epoch 4/10\n",
            "50219/50219 - 214s - loss: 0.2290 - accuracy: 0.9199 - val_loss: 0.3561 - val_accuracy: 0.8793\n",
            "Epoch 5/10\n",
            "50219/50219 - 215s - loss: 0.2042 - accuracy: 0.9279 - val_loss: 0.3692 - val_accuracy: 0.8790\n",
            "Epoch 6/10\n",
            "50219/50219 - 222s - loss: 0.1827 - accuracy: 0.9349 - val_loss: 0.3941 - val_accuracy: 0.8775\n",
            "Epoch 7/10\n",
            "50219/50219 - 218s - loss: 0.1624 - accuracy: 0.9401 - val_loss: 0.4188 - val_accuracy: 0.8768\n",
            "Epoch 8/10\n",
            "50219/50219 - 211s - loss: 0.1502 - accuracy: 0.9451 - val_loss: 0.4217 - val_accuracy: 0.8726\n",
            "Epoch 9/10\n",
            "50219/50219 - 212s - loss: 0.1337 - accuracy: 0.9509 - val_loss: 0.4475 - val_accuracy: 0.8740\n",
            "Epoch 10/10\n",
            "50219/50219 - 212s - loss: 0.1225 - accuracy: 0.9547 - val_loss: 0.4839 - val_accuracy: 0.8745\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Czd41c1WxJWN",
        "colab_type": "code",
        "outputId": "f3cb2b8a-5c6b-4608-ff72-b5c65f3a121a",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 541
        }
      },
      "source": [
        "def plot_graphs(history, string):    \n",
        "    plt.plot(history.history[string])\n",
        "    plt.plot(history.history['val_'+string])\n",
        "    plt.xlabel(\"Epochs\")\n",
        "    plt.ylabel(string)\n",
        "    plt.legend([string, 'val_'+string])\n",
        "    plt.show()\n",
        "\n",
        "plot_graphs(history, \"accuracy\")\n",
        "plot_graphs(history, \"loss\")"
      ],
      "execution_count": 38,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nP8n+AAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\ngg==\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "zAKL_F-wxJYy",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import seaborn as sns\n",
        "from sklearn.metrics import accuracy_score, confusion_matrix\n",
        " \n",
        "y_pred = model.predict(X_validation_padded)\n",
        "y_pred = y_pred.argmax(axis = 1)\n"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Tt3MPkFXxJhu",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 523
        },
        "outputId": "3c971497-4554-470d-88af-9731e859e815"
      },
      "source": [
        "labels=[1,2,3,4,5,6,7,8,9,10] \n",
        "conf_mat = confusion_matrix(Y_validation_cat_seq, y_pred)\n",
        "fig, ax = plt.subplots(figsize=(10,8))\n",
        "sns.heatmap(conf_mat, annot=True, fmt='d',xticklabels=labels, yticklabels=labels)\n",
        "plt.ylabel('actual results',fontsize=18);\n",
        "plt.xlabel('predict result',fontsize=18);\n",
        "print(dict(list(label_word_index.items())))\n",
        "\n"
      ],
      "execution_count": 83,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "{'平板': 1, '水果': 2, '洗发水': 3, '衣服': 4, '酒店': 5, '计算机': 6, '书籍': 7, '手机': 8, '蒙牛': 9, '热水器': 10}\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkUAAAHoCAYAAABHFJtsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdd3gU1dvG8e/ZJEACUkIPICBgRWmh\n916kg2AvoChSLD87AoovNkTFLiAgqEAQBOkIUhVIoqETOgIJvXdSzvtHQkggbSVkNub+XNdc7p6Z\n3b1ZN5snp8wYay0iIiIi2Z3L6QAiIiIinkBFkYiIiAgqikREREQAFUUiIiIigIoiEREREUBFkYiI\niAgA3k4H+LfOj30lS51LoFCfIKcjuK2oXwGnI7jtXPQFpyO45ci5U05HcJuPV9b72oiOiXY6glu8\nXF5OR3BbdGyM0xHcYpwO8C9FXYrI1OhRR3Zm+O9an0K3eOzbr54iEREREbJwT5GIiIjcYFmsB/B6\nqadIREREBPUUiYiISEpsrNMJMpV6ikRERERQT5GIiIikJDZ79RSpKBIREZFkWQ2fiYiIiGQ/6ikS\nERGR5GWz4TP1FImIiIigniIRERFJSTabU6SiSERERJKnM1qLiIiIZD/qKRIREZHkZbPhM/UUiYiI\niKCeIhEREUmJluT/9wyeHUbjz+bSZfTvCW1fLw+n+Rfz6TZmMd3GLGb5joMARJw4R82PZia0/9+8\ntQmPmbtpH12/+537vlvMs5NXcvzcxUz/twBs2ryC4OB5rFw1h+UrfgWgU6c2hIQu4PSZnVSpercj\nuS77YMRggjcvYu7yKUnaH33yfn5bOY15K37m1cHPAeDj482Hn73F3GVBzF4ymZp1qzkRmU+++D82\nbFvBkj9/TWhr16ElS1fOJPLYRipVviuh3cfHh0+/HMriP2awaMUv1KlX3YnIKcqZMycr/5jFX6G/\nsXbN7wwe9D+nI6XI5XKxcuUcpk4dA8DXX3/I6tVzCQ6ex08/fU3u3H4OJ7xi1MjhROxbS1jYooS2\nt956mb//+o3QkAXMmf0TxYsXdTBhUjlz5mT58l8JDp7H338vZODAFwEYNWo44eErWL16LqtXz+We\ne+50OGnKWrZoxMYNywjftIJXXu7jdJx06de3J2Fhi1iz5nf693vS6TjXzdrYDN88WbYoitrfXYqv\nutW+pv3h6uUI6tGYoB6NqV/uypdZyfy5E9rfbFUJgOjYWD5cuJ5RD9RlSs/GVCiSl0l/7cq0f8PV\nWrd+gNq12lC/XnsANm3awoMPPMOKFcGOZbrs50kzeaJ70i+wWvUCad66Efc27E6rel0Z/eV4AO5/\npDMArRt049Guz/DGkBcxxmR65sk/TeeBrr2StIVv3kaPR/qx6s/QJO0PP3YfAI3rdqB7x54M/r9X\nHcmckosXL9KsRTeqBTanWmALWrZoRM0aVZ2Olay+fXuwZcv2hPuvvDKEmjVbU6NGK/bujaR378cc\nTJfU9+ODaNv2oSRtw4d/TdVqzQms3oI5cxby5oAXHEp3rYsXL9Kq1f3UqNGKGjVa0bx5Q2rUqALA\n66+/S82aralZszXr1m1yOGnyXC4Xn40YStt2D3N3pcZ0796RO+6o4HSsVN1112306PkgdercS7Vq\nzWnTphnlypVxOpa4IVsURdVuLkTeXDmu6zmsBSycj4rBWsvZi9EUvilXxgTMAFu27GDbtp1OxwAg\nZOXfnDh+MknbQ4/fxzcjxnLpUhQAR48cB6D8bbfw5/KQhLbTJ09zd+XM/8t11Z+hnDh+Iknbtq07\n2bF99zXH3npbOVYsWw3AkSPHOHXyFJWrVMyMmOl29uw5IK4nztvHB2utw4muVaJEMVq1asLYsZMS\n2k6fPpNwO1eunB6Ve8WK1Ry76jOSOK9fbj+PygtJPwc+Pt4ely81NapXYceO3ezatYeoqCiCgmbQ\nvl1Lp2Ol6vbbKxASHMb58xeIiYlh2fJVdOzY2ulY1yc2NuM3D+ZxRZEx5onMeq1Jf+3kvu8WM3h2\nGKcuXEpojzh5ju5jltDzxxX8vfcoAD5eLt5oWYn7vltM8y/ms/PIaTrdUzqzoiZhreXXmRNY8cdM\nnujxgCMZ3FW2XGmq167CtPnjmfjraO6pElf4bN64lWatGuLl5UXJmwOoWOlOAkoUczht6jZuCKdl\n68Z4eXlxc+kS3FP5LgJKelZml8tFaMgC9kesY9GiZQSHhDkd6RrDhg1mwIB3ib3qS/Lbb4exe3co\nt91Wnq++GudMODcMGfIqO3eE8MADnXjr7WFOx0nC5XKxevVc9u4NY9GiFYSErAHg7bdfJiRkPh9+\nOIgcOa7vD8YbJaBEMfbui0y4vy9iPwEBnvVzdrWNG8OpW68m/v4F8PXNRetWTShVMsDpWOIGjyuK\ngLcz40W6VS3DrGeaM7lHIwrlycnwRRsBKJwnJ/OebcHkHo34X9OKvP5rKGcuRhEVE8uUsF1MeqIR\nv/VtSYUieRmzcmtmRL1Gs2ZdqVunLZ06Ps7TvR6lbt0ajuRwh5e3F/ny56Nzy0d5b/AnfD76QwCm\n/DiDA/sPMmPhjwwc+jJ/B68lJsazTxY28YdpREYeZP6SKQx573VCV68hJsaz/vqJjY0lsHoLSpcN\npHpgFe666zanIyXRunUTDh06SljYhmv2Pf30y9xySw3Cw7fTtWs7B9K5Z9CgD7ilXHUmTvyFZ5/N\ntL/p0iU2NpaaNVtTrlxNqlevxJ133srAgR9wzz2NqVu3Hf7++Xnppd5Ox/zPCA/fzkfDvmTunJ+Y\nPetH1q7d6HHfDW6zsRm/eTBHiiJjzLoUtvVAijMVjTG9jDGhxpjQ75asTemwdCmYOxdeLoPLGDpX\nKsOG/XHDOTm8vcjvG/eX053F8lMyf27+OXaGLYfihoNKFciNMYYWtwewJuLYdWX4t/ZHxk0KP3z4\nKL/OnE9gYCVHcrjjQORB5s+Om6C6LmwjsbGx+BcsQExMDP/35nDaNr6fpx95gZvy3cSuHXscTpu6\nmJgYBr/xPs3qd+bxB/uSN99N7ExmmM0TnDx5iiVL/6Bli0ZOR0midu1A2rZtRnj4CsaP/5xGjeow\nZsynCftjY2OZMuXXLDX0MHHiNDp1auN0jGSdPHmKpUtX0qJFIw4cOATApUuXGD8+iMDAyg6nS15k\nxIEkvSwlSxQnMvKAg4nSZ+y4SdSs1ZomTbtw/MRJj5nWIOnjVE9RUeBRoF0y29GUHmStHWmtDbTW\nBvZsdH2FwOEzFxJu/751P+UL5wXg2LmLxMTGjbvvO3GWPcfPUjJ/borkycXOI6c5Fr/ibNXuw9xS\n8KbryvBv+Pn5kidP7oTbTZvWZ9MmZ3qs3PHb3CXUil+lVbbczfjk8OHY0ePk8s2Fr1/c3Kx6DWsS\nExPD9q2e/SXi65sLPz9fABo0qkN0TAxbt+xwONUVhQr5ky9f3Oc5V65cNGvagC0elA9g0KAPKV++\nFrffXo9HH+3HkiV/0qPH89xyy5Uh6bZtm7N1q2flvlr58mUTbrdv19Kj3uekn4OcNG1any1bdlCs\nWJGEY9q1a8nGjVucipiqkNA1lC9fljJlSuHj40O3bh2YOWuB07HSVLhwQQBKlQqgY8fWTJz0i8OJ\nrlNsTMZvHsyp8xTNAvJYa9dcvcMYsySjX+y1GaGE7jnCifOXaPHlfHrXu53QPUfYcugkBkNAPr+E\nVWZ/7znKVyvC8Y7vRXqzZSXyxfccPV3vNnr+uAJvl4vieX0Z0jbzV/QUKVKISZNGAnFDUkFBM/jt\nt6W0a9+S4cPfolAhf6ZNHcO6dZvp0OHRTM8HMGLke9SsW40C/vn5Y908RnzwDVN+nM4Hn73F3OVT\niIqK4uW+gwAoWKgA30/5itjYWA7uP8yLvd90JPPXoz+iTr0a+BfMz98bFzPs/S84cfwkQz8YQMFC\n/vwQ9A0b1ofzQJenKFTYn4lTRxMbG8uB/Yfo9/SrjmROSfHiRRnz3ad4eblwuVz8/PNMZs9Z6HSs\nNBljGD36Y266KQ/GGNav30z//gOcjpVgwoQvadigNoUK+bNrZyhDhnxEq9ZNuPXWctjYWP7ZE0Gf\nPq85HTNBsWJFGD36Y7y8vHC5XEydOou5cxcxb95EChUqiDGGdes20rfvG05HTVZMTAzPPf8mc2b/\nhJfLxbjvJ2eJPwCDJo/Cv2ABoqOi6d9/ACdPnnI60vXx8OGujGay0mqExM6PfSVLBS/UJ8jpCG4r\n6lfA6QhuOxd9Ie2DPMiRc1nvC9PHK+ud8zU6JtrpCG7xcnk5HcFt0R7eA3A1zzmJhnuiLkVkavSL\nmxdn+O/anHc09ti3P+t9u4mIiEjm8PAl9BnNE1efiYiIiGQ69RSJiIhI8rLZnCIVRSIiIpI8DZ+J\niIiIZD/qKRIREZFkWZu1VhVeL/UUiYiIiKCeIhEREUmJJlqLiIiIoInWIiIiItmReopEREQkedls\n+Ew9RSIiIiKoKBIREZGUxMZk/JYGY8wYY8whY8yGRG2TjTFr4rfdxpg18e1ljDHnE+37JtFjqhlj\n1htjthtjPjPGpHkhWg2fiYiISPKcGT4bB3wBjE+IYW33y7eNMcOBk4mO32GtrZzM83wNPAWsBuYA\nrYC5qb2weopERETEY1hrlwHHktsX39vTDZiY2nMYY4oDea21q6y1lrgCq2Nar62eIhEREUme5y3J\nrw8ctNZuS9RW1hgTBpwC3rTWLgdKAPsSHbMvvi1VKopEREQk0xhjegG9EjWNtNaOTOfDHyBpL9F+\n4GZr7VFjTDVgujHmrn+bLcsWRf7PTnY6gluOrxjhdAS3lW7ymtMR3Hbq0nmnI/znRcdEOx3hPy86\nHZNR5fpYpwNkFTdgTlF8AZTeIiiBMcYb6AxUS/RcF4GL8bf/MsbsAG4FIoCSiR5eMr4tVZpTJCIi\nIllBMyDcWpswLGaMKWyM8Yq/fQtQAdhprd0PnDLG1Iqfh/QoMCOtF8iyPUUiIiJygzkwp8gYMxFo\nBBQyxuwDBltrvwPu59oJ1g2AIcaYKCAWeMZae3mS9rPErWTzJW7VWaorz0BFkYiIiKTEgaLIWvtA\nCu2PJ9M2FZiawvGhQEV3XlvDZyIiIiKop0hERERSYG32mvSvniIRERER1FMkIiIiKfG8kzfeUCqK\nREREJHnOXPvMMRo+ExEREUE9RSIiIpKSbDZ8pp4iEREREdRTJCIiIinJZnOKVBSJiIhI8jR8JiIi\nIpL9qKdIREREkpfNhs/UUyQiIiKCiiIAXC4XK1fOYerUMQCMHPkRmzevYNWqOaxaNYd77rkz0zMN\n+nYKjZ4ZQudXPk5oe/mzH+n2+qd0e/1TWvd/n26vfwrA7BVhCe3dXv+Uyg+9RvjuSADm/rmGLq9+\nQtdXP6H3+99x/NTZG5790y+GsnH7Hyxd+WtCW7uOLVm6aib7j2+iUpUrFy0uUCA/02Z+z86Iv3h3\n2MAbns0dV38unnnmMTZsWMr58/9QsGABh9OlrGTJABYumMK6tYtZu+Z3+vXt6XSkND3X/ynWrPmd\nsLBFTJjwJTlz5nQ6Upr69e1JWNgi1qz5nf79nnQ6Trq0bNGIjRuWEb5pBa+83MfpOGkaNXI4kfvW\nsiZskdNR0m371lWE/b2Q0JAFrFo5x+k41y82NuM3D6aiCOjbtwdbtmxP0vbGG+9Sq1YbatVqw7p1\nmzI9U4cG1fj61aS/zIb1f4ig954n6L3naVqjIk2qxxUX99arktA+tHd3ShQuwO1lAoiOieGD8b8y\nekAvfv7gBW69uTiTFvx5w7NP+ukX7u/yVJK28E3b6PFwf1b+EZqk/eLFi7w/dARvDfzwhudy19Wf\ni5UrQ2nT5iH++Wevg6nSFh0dzcuvvM09lRpTt147evd+nDvuqOB0rBQFBBSjT58e1KrVhipVmuLl\n5UX3bh2cjpWqu+66jR49H6ROnXupVq05bdo0o1y5Mk7HSpXL5eKzEUNp2+5h7q7UmO7dO3r05wJg\n/Pgg7m37kNMx3Nas+X0EVm9BrdptnI4ibsr2RVGJEsVo1aoJY8dOcjpKEtXuuIW8eXyT3WetZcGq\ndbSuXfmafXP/XEur2pXijwMsnL94CWstZ85foHCBvDcyNgCr/gzlxPGTSdq2bd3Jju27rjn23Lnz\nBK/6m4sXLt3wXO5I7nOxdu1G9uzZ52Cq9Dlw4BBhazYAcObMWcLDt1EioJjDqVLn7e2Nr28uvLy8\n8PP1JXL/Aacjper22ysQEhzG+fMXiImJYdnyVXTs2NrpWKmqUb0KO3bsZteuPURFRREUNIP27Vo6\nHStVy1es5tjxE07HyN7UU5Q5jDG3G2OaGmPyXNXeKjNzDBs2mAED3iX2qv9Rb731EsHB8/jww4Hk\nyJEjMyOl6e/wXRTMl4fSxQtds2/+qrW0qhNXLPl4ezGgR0e6vvYJzfoMZWfEITo1rp7ZcbOklD4X\nWU3p0iWpXKkiq4PDnI6SosjIA3zyyTfs3BHM3j1hnDp1ioULlzkdK1UbN4ZTt15N/P0L4Oubi9at\nmlCqZIDTsVIVUKIYe/dFJtzfF7GfAA8vlrMiay1z50xk9aq5PNkz6/VyXcPGZvzmwRwpiowx/YEZ\nQD9ggzEmcV/5u5mVo3XrJhw6dJSwsA1J2gcN+pBKlZpQr157ChTIz//+90xmRUqXuX9eKXwSW7d9\nD7ly5qBCqbgvuqjoGIIWrmLyu8+x8MsBVChVjO9mLM7suFlOSp+LrCZ3bj+CJo/ixZcGc/r0Gafj\npCh//ny0a9eSCrfW4ubSVfHL7ceDD3Z2OlaqwsO389GwL5k75ydmz/qRtWs3EhPj2V/2kjkaNu5E\njZqtaNvuYXr3fpz69Wo6HUnc4FRP0VNANWttR6ARMNAY81z8PpPSg4wxvYwxocaY0Ojo6/+Sr107\nkLZtmxEevoLx4z+nUaM6jBnzKQcOHALg0qVLjB8/hcDAawsQp0THxLAoZAOtat1zzb75K9fSOn7o\nDGDLP3F/FZYqWhBjDC1r3cParf9kWtasKqXPRVbi7e3NlMmjmDjxF6ZPn+t0nFQ1bVqf3bv3cOTI\nMaKjo5k+fS61awU6HStNY8dNomat1jRp2oXjJ06ybdtOpyOlKjLiQJLerJIlihMZ6dnDlFnR5ff0\n8OGjzJgxl+rVPef3x7+i4bPMeV1r7RkAa+1u4gqj1saYj0mlKLLWjrTWBlprA72986R0WLoNGvQh\n5cvX4vbb6/Hoo/1YsuRPevR4nmLFiiQc0759CzZt2nLdr5VRVm/YTtmAwhQtmD9Je2xsLPNXrUuY\nTwRQxD8fOyMOcexUXAG5cv02ypYogqQupc9FVjJq5HA2h2/n0xEjnY6Spr17IqhRsyq+vrkAaNK4\nHuHh2xxOlbbChQsCUKpUAB07tmbipF8cTpS6kNA1lC9fljJlSuHj40O3bh2YOWuB07H+U/z8fMmT\nJ3fC7ebNGrJxo+f8/pC0OXXyxoPGmMrW2jUA1tozxpi2wBjgbocyJRg7dgSFCvljjGHduk306/dG\npmd49fOfCN28kxOnz9K871B6d2lO58Y1mLcy+aGzv8J3UaxgPkoWLZjQVqRAXp7u3IweQ77B28uL\n4oUK8M4z993w7N98N5w69arjX7AAYZuWMOy9zzl+/CTvfvgmBQv582PQN2xYH879neOWMYesW8RN\neXOTw8eH1vc2pXunnmzdsuOG53TXs88+zosvPkPRooUJCZnPvHmLefbZV52OdY26darzyMNdWbd+\nE6Ehcb/0Bg58n7nzfnc4WfKCQ8KYNm02wcHziY6OZu2ajYwa/aPTsdIUNHkU/gULEB0VTf/+Azh5\n8pTTkVIVExPDc8+/yZzZP+HlcjHu+8ls2rTV6Vip+mHClzRsUJtChfzZvTOUt4d8xNhxnrUoJrGi\nRQvz85TvAPD29mLSpOnMX7DE2VDXy8PnAGU0Y63N/Bc1piQQba29pu/WGFPXWvtHWs/h61s684Nf\nh+MrRjgdwW2lm7zmdAS3nbp03ukIbomKiXY6gttS7MqVDJOlvtwkU0VfisjUH8Hzv7yf4R9H306v\neezXiCM9RdbaFNc1p6cgEhEREclouvaZiIiIJC+bDZ9l+5M3ioiIiIB6ikRERCQlHr6EPqOpKBIR\nEZHkZbOiSMNnIiIiIqinSERERFLiwGl7nKSeIhERERHUUyQiIiIp0ZwiERERkexHPUUiIiKSvGzW\nU6SiSERERJKnM1qLiIiIZD/qKRIREZHkZbPhM/UUiYiIiKCeIhEREUlJNjt5o4oiERERSV42Gz7L\nskVRQd+bnI7gllJNXnU6gtv2jHvC6QhuC3hktNMR3BIVE+10BLcZY5yO4Dabzf7albRlvU+xZIYs\nWxSJiIjIDZbNeoo00VpEREQE9RSJiIhISrLZyRtVFImIiEiybGz2mo+n4TMRERER1FMkIiIiKdFE\naxEREZHsR0WRiIiIJM/GZvyWBmPMGGPMIWPMhkRtbxljIowxa+K3Non2vW6M2W6M2WKMaZmovVV8\n23ZjzGvp+eeqKBIRERFPMg5olUz7J9bayvHbHABjzJ3A/cBd8Y/5yhjjZYzxAr4EWgN3Ag/EH5sq\nzSkSERGR5Dmw+sxau8wYUyadh3cAJllrLwK7jDHbgRrx+7Zba3cCGGMmxR+7KbUnU0+RiIiIJC82\nNuO3f6+vMWZd/PBagfi2EsDeRMfsi29LqT1VKopEREQk0xhjehljQhNtvdLxsK+BckBlYD8w/EZk\n0/CZiIiIJO8GLMm31o4ERrr5mIOXbxtjRgGz4u9GAKUSHVoyvo1U2lOkniIRERHxaMaY4onudgIu\nr0z7FbjfGJPTGFMWqAAEAyFABWNMWWNMDuImY/+a1uuop0hERESSZzN/orUxZiLQCChkjNkHDAYa\nGWMqAxbYDTwdF89uNMYEETeBOhroY62NiX+evsB8wAsYY63dmNZrqygSERGR5DlwRmtr7QPJNH+X\nyvFDgaHJtM8B5rjz2ho+ExERESEb9hR99Pk7NGvRgCNHjtGsbqck+3r1eYxB77zM3eXrcfzYCVq0\nbszLb/QjNjaW6OgY3nrjfUJWh2V65hFfvEvzVo04cvgoDWq3AyB/gXyMGvsJN99cgj17Injy8ec5\neeIUderVYMJPX7Hnn30AzJr5G8M//PKGZxw8ZQXLwvfinycXU1+48r5O/GMTk1eF4zKG+reX5IU2\n1Vm5LYLP5v1FVHQMPt5evNA6kBrlAzh7MYonvrlS1B86eZY2VcrxSruaNzx/YuUrlGXM9yMS7pcu\nczPv/d+nVK9ZhQoVygKQL19eTp48RYM67TM1W3pt37qK02fOEBMTS3R0NLVqt0n7QZls5Lcf0aZN\nMw4fPkKVqs0AqHTPnXzxxfvkypWT6Oho+vUfQGjoGoeTxhk1cjht2jTj0OEjVKnSNMm+559/mmEf\nDqJY8YocPXrcoYSpy5kzJ0t+n0qOnDnx9vZi2rTZvD3khizgyTAtWzTi44+H4OVyMWbsRD4cduO/\ny67Xc/2f4okeD2CtZcOGcJ588kUuXrzodKx/z4HzFDkp2/UUTflpOg/f98w17cVLFKNB4zrs2xuZ\n0LZi2Sqa1+9My4ZdeanfQIaNeDszoyaY9NM07u/yZJK2/i/0YvnSldSs2pLlS1fS/4UrKxpXrQyl\ncf2ONK7fMVMKIoD21crzVY/mSdpCduxnyeY9BD3XgWkvduKxBhUBKOCXixGPNePnFzrxzn31GRC0\nHIDcOX0Ieq5Dwla8QB6a3lU6U/Intn3bLhrUaU+DOu1pVK8j58+fZ/bMBfR87LmE9l9nzGfmrwsy\nPZs7mjW/j8DqLTyyIAIYP2EKbds9nKTt3fcG8H9DP6F6jZa8PWQ47707wKF01/p+fBBt2z50TXvJ\nkgE0b9aAf+L/EPFUFy9epFmLblQLbE61wBa0bNGImjWqOh0rRS6Xi89GDKVtu4e5u1JjunfvyB13\nVHA6VqoCAorRp08PatVqQ5UqTfHy8qJ7tw5OxxI3OFYUGWNqGGOqx9++0xjzYuJrmdwoq1f+xYnj\nJ69pf2voKwwd/DE20aSyc2fPJ9z2ze2LU/Xyyj9DOX5V5tZtmjL5p+kATP5pOm3ubeZEtATVbilG\nXt+cSdqCVoXzRMN7yOHtBYB/Hl8Abi9RkCJ5/QAoVzQ/F6OiuRQdk+Sx/xw+ybEz56latmgmpE9Z\nw0Z12L1zD3sTFcsAnTq3YeqUmQ6l+m9YsWI1x4+fSNJmrSXvTXkAyJf3JvbvP5jcQx2xYsVqjl2V\nF+Cjj97i9TeGJvnu8FRnz54DwMfHG28fH4/OXKN6FXbs2M2uXXuIiooiKGgG7du1TPuBDvP29sbX\nNxdeXl74+foSuf+A05GujwPXPnOSI8NnxpjBxF2PxNsY8xtQE1gMvGaMqRI/aSrTtGjdmAP7D7F5\n45Zr9rW6tymvDXyOQoUL8uj9z2ZmrFQVLlyQgwcPA3Dw4GEKFy6YsC+wRmUWr5jBwQOHGPzmB2wJ\n3+5Ixn+OnOLv3Qf5YsFf5PT24oU21alYqnCSYxZu+Ic7ShRMKJwum7d2Fy3vKYsxJjMjX6Nz13uZ\n+vOsJG116lbn0KEj7Nzxj0Op0matZe6ciVhrGTXqB0Z/96PTkdLlpZfeYtbMH3n//YG4XC4aNvLs\nv7LbtWtBZMR+1q1L9coBHsPlchG8eh7ly5Xh62/GERyS+dMB0iugRDH27rvyx8i+iP3UqF7FwURp\ni4w8wCeffMPOHcGcP3+BhQuXsnDhMqdjXR8Nn2WKrkBdoAHQB+horX0HaAl0z8wguXxz0e/Fp/jo\n3S+S3T9v9iIa1WpPz4f78/LrfTMzmltsfD/WurUbqVqxCY3rdWD0txMY/5NzY/AxsbGcOneRCc+2\n5fk21XnlpyVJ/jLdfvA4I+aG8manOtc8dv66nbSqdEsmpr2Wj48Pre9tyvRfki5e6HJfW6ZOmZXC\nozxDw8adqFGzFW3bPUzv3o9Tv17mzsv6t3r1epSXX36bcuVr8PLLb/Httx85HSlFvr65eO3Vfrz1\ntudmvFpsbCyB1VtQumwg1QOrcNddtzkd6T8lf/58tGvXkgq31uLm0lXxy+3Hgw92djqWuMGpoija\nWhtjrT0H7LDWngKw1p4HUm0HfvQAACAASURBVOxbS3xq8LMXj2VIkDJlSlHq5hIsWD6VlWvmUzyg\nKPOWTKFwkYJJjlu98i9uLlOSAv75M+R1r9fhw0cpWjSu16Vo0cIcORz3fpw5fTahi3zhb8vw9vbG\n379Ais9zIxXNl5umFUtjjOHuUoVxGcPxs3ETDg+ePMuLE37nnW71KVUwb5LHbYk8RnSs5c6ShZyI\nnaBZi4asXbOJw4eOJrR5eXnRtn1Lfpk628FkaYuMjOuyP3z4KDNmzKV69coOJ0qfRx7uyi/T44rQ\nn6fOonqg5+YuV64MZcrczF+hv7Ft6ypKlixO8Or5CT+XnuzkyVMsWfoHLVs0cjpKiiIjDlCqZEDC\n/ZIliid8rj1V06b12b17D0eOHCM6Oprp0+dSu1ag07Gui42NzfDNkzlVFF0yxvjF3652udEYk49U\niiJr7UhrbaC1NjB3Tv8MCRK+eRuVb2tI7cotqV25JfsjD9Kq0X0cPnSUMmWvnCG84j13kDNHDo4f\nu3ZOgRPmzf2d7g92BKD7gx2ZO2cRAEWKXCkkqlS9G5fLxbFjzqyGaXznzYTs2A/EzRGKiomhQO6c\nnDp/kX5jf+O5VtWoUubaOUPz1jrfSwTQ9b6218wbatS4Ltu27vToL2c/P1/y5MmdcLt5s4ZsTGZo\n2BPt33+QBg1qA9C4cV22b9/lcKKUbdgQTomSlahway0q3FqLffv2U6Nmy4RhbU9TqJA/+fLF/QGS\nK1cumjVtwJYtOxxOlbKQ0DWUL1+WMmVK4ePjQ7duHZg5y7MXN+zdE0GNmlXx9c0FQJPG9QgP3+Zw\nKnGHU0vyG1hrLwJYm2TWlQ/w2I184S9GfUjtutXxL5ifkA0LGf7+V0z6YVqyx7Zp15wu97cnOiqa\nCxcu0LvnSzcyWoq+/W44devVwL9gAdZuWsqH733OZx+PZPT3n/LQI13ZuzeSJx9/HoB2HVryeM8H\niI6O4cKFC/Tq8WKmZHxt4hJCdx7gxNkLtHh3Mr2bV6FjYAUG/7yCLp/8go+Xi3fuq48xhsl/bmbP\n0dN8u2gt3y5aC8A3PVskTMResH4XXzzePLWXu+H8/Hxp1LguL/R/M0l75673evwE66JFC/PzlLjz\nnHl7ezFp0nTmL1jibKhkTBj/BQ0a1KZQIX927ghhyDvDeab3K3w8/G28vb25cOEivZ991emYCSZM\n+JKG8Xl37QxlyJCPGDtuktOx0q148aKM+e5TvLxcuFwufv55JrPnLHQ6VopiYmJ47vk3mTP7J7xc\nLsZ9P5lNm7Y6HStVwSFhTJs2m+Dg+URHR7N2zUZGjc4a8/lSlM3mFBlPXn2QmpL+FbNU8IsxUU5H\ncNuecU84HcFtAY+MdjqCW05fOp/2QR7G5fDk938jq33PZa20WVPW+xTHiboUkanRzw59NMM/jrkH\njPfYtz/bnbxRRERE0snDl9BnNBVFIiIikrxsNnyW7c5oLSIiIpIc9RSJiIhI8jx8CX1GU0+RiIiI\nCOopEhERkZRkszlFKopEREQkedls9ZmGz0RERERQT5GIiIikJJsNn6mnSERERAT1FImIiEgKPP2q\n9hlNRZGIiIgkT8NnIiIiItmPeopEREQkeeopEhEREcl+1FMkIiIiydPJG0VERESynyzbU3Tiwlmn\nI7glJgtW2wGPjHY6gtsO/Pml0xHckjuwh9MR3BZrs94cA+N0APE4We9T7JBsNqcoyxZFIiIicmPZ\nbFYUafhMREREBPUUiYiISErUUyQiIiKS/ainSERERJKna5+JiIiIoOEzERERkexIPUUiIiKSPPUU\niYiIiGQ/6ikSERGRZNkseAb766GiSERERJKn4TMRERGR7Ec9RSIiIpI89RSJiIiIZD/qKRIREZFk\nWfUUiYiIiGQ/2b6naOPm5Zw5fYaY2Fiio6NpUK8D34//nAq33gJAvnx5OXnyFHVq3etw0itcLhd/\n/DGLyMgDdOnSg9KlSzFhwuf4+xcgLGw9PXq8QFRUlNMxE/Tu8wSPPN4NrGXTxi30eeZVhn38NlWq\nVsQYw/btu+nz9CucPXsuU3MN+upHlv61Ef98N/HLx68DEL5rH++MmsylS9F4ebkY8GQ37q5QGmst\nH4ydyvK/N5ErZw7e6fMQd95SCoBn/u8r1m/7hyq338IXrz+dqf+G5IwaOZx72zTj0OEjVK7S1Ok4\naSpZMoBxY0ZQpGghrLWMHv0jn3/xndOx0vRc/6d4oscDWGvZsCGcJ598kYsXLzodK0VZ8X1u2aIR\nH388BC+XizFjJ/LhsC+djpSmfPnyMvLbj7jrrtuw1vLUU/9j1eq/nI7176mnKPtp0/pB6tS6lwb1\nOgDw2KP9qFPrXurUupcZ0+fx64x5DidMqm/fHmzZsj3h/tChr/H5599RsWJDjh8/yeOPd3cwXVLF\nixfl6d6P0qR+R+rUaIPLy4vOXdsy4LWh1K/djnq12rJvbyRPPf1Ipmdr36gmXw/onaTtkx9m8Mx9\nrZny0av06d6GT36YAcCKsE38s/8wsz4fyKCnu/N/o4ISHvN4h6YM7fdwpmZPzfjxQdzb9iGnY6Rb\ndHQ0L7/yNvdUakzdeu3o3ftx7rijgtOxUhUQUIw+fXpQq1YbqlRpipeXF927dXA6Vqqy2vvscrn4\nbMRQ2rZ7mLsrNaZ7944enfeyTz4ewvz5i6l4d0OqVmvO5vBtTke6PrE3YPNgKorS0LlLG6YEzXQ6\nRoISJYrRqlUTxo6dlNDWsGEdpk2bA8CPP06lXbsWTsVLlre3N7l8c+Hl5YWfby4O7D/E6dNnEvb7\n+uZ05ARhgXeWJ18evyRtxhjOnrsAwOlzFyhcIB8Ai0PW065hDYwxVLq1LKfPnufw8ZMA1Lr7NnL7\n5src8KlYvmI1x46fcDpGuh04cIiwNRsAOHPmLOHh2ygRUMzhVGnz9vbGN+Fz7Uvk/gNOR0pVVnuf\na1Svwo4du9m1aw9RUVEEBc2gfbuWTsdKVd68N1G/Xk3GjJ0IQFRUFCdPnnI4lbjDY4oiY8x4J17X\nWsuMmeNZ/sevPNHjgST76tatwaFDR9ixY7cT0ZI1bNhgBgx4l9jYuHK7YMECnDx5ipiYGAAiIvYT\n4EFfdPv3H+Tzz0azfvMywnes5NSp0yz+fQUAX3z9Plt2rqLCreUY+Y0j//uv8crjnfl4wgyaPzOI\nj8dP57mH2gFw6NhJihXMn3Bc0YL5OXTspFMx/7NKly5J5UoVWR0c5nSUVEVGHuCTT75h545g9u4J\n49SpUyxcuMzpWOmWFd7ngBLF2LsvMuH+Pg/7bktO2bI3c+TIUb4b/QkhwfP59pth+Pn5Oh3ruthY\nm+FbWowxY4wxh4wxGxK1DTPGhBtj1hljfjHG5I9vL2OMOW+MWRO/fZPoMdWMMeuNMduNMZ8ZY0xa\nr+1IUWSM+fWqbSbQ+fL9zMzSvNl91KvTjs4dn6BXr0eoW7dGwr77urXzqF6i1q2bcOjQUcLCNqR9\nsIfIlz8vbe5tRuWKjbmjfB38/Pzo1j1umKFv79e4o3wdtm7ZQacunjFnK2jBCl5+vBO/fTOElx/v\nxOCvf3I6UraRO7cfQZNH8eJLg5P0JHqi/Pnz0a5dSyrcWoubS1fFL7cfDz7Y2elY6ZKV3uesxtvL\niypV7ubbb8dTvUZLzp49x6uv9HU6VlY0Dmh1VdtvQEVr7T3AVuD1RPt2WGsrx2/PJGr/GngKqBC/\nXf2c13Cqp6gkcAr4GBgev51OdDtZxphexphQY0xoVPTpDAmyP/IgAIcPH2XmzPlUC6wEgJeXF+3b\nt2Lq1FkZ8joZoXbtQNq2bUZ4+ArGj/+cRo3q8NFHb5EvX168vLwAKFGiOJGRntON36hxXf7ZvY+j\nR44RHR3NzF/nU6NW1YT9sbGxTPt5Fu07eEa3+K9LgmlWM+4z0KJ2FTZs/weAIv75OHD0ypDUwaMn\nKOKfz5GM/0Xe3t5MmTyKiRN/Yfr0uU7HSVPTpvXZvXsPR+I/19Onz6V2rUCnY6UpK73PkREHKFUy\nIOF+SQ/7bkvOvoj97Nu3n+CQuB64adNmU6Xy3Q6nuk6xNuO3NFhrlwHHrmpbYK2Njr+7irg6IkXG\nmOJAXmvtKhs3P2M80DGt13aqKAoE/gIGACettUuA89bapdbapSk9yFo70lobaK0N9PG+6bpD+Pn5\nkidP7oTbTZrWZ9OmLQA0blKXrVt3EBnhOT+EgwZ9SPnytbj99no8+mg/liz5kyeeeI5ly1bSuXMb\nAB56qAuzZv3mcNIr9u2NJLBGZXzj59w0bFSHLVu2U/aW0gnHtGrTlK1bdzoVMYnC/vkI3RQ3iX31\nhq3cXKwwAI0C72bm0mCstazduoub/HIlzDeS6zdq5HA2h2/n0xEjnY6SLnv3RFCjZtWEz3WTxvUI\nzwITarPS+xwSuoby5ctSpkwpfHx86NatAzNnLXA6VqoOHjzMvn2R3HprOQCaNKnH5s1bHU51nTxz\nonUPIHFVX9YYE2aMWWqMqR/fVgLYl+iYffFtqXJkSb61Nhb4xBgzJf6/B53IUqRIISZO+hYAb28v\ngoJ+ZeFvcfMCunZtx5QpmTqS968NGPAeEyZ8weDBL7F27UbGjZvsdKQEf4Wu5dfp81jyxwxiomNY\nt3YT34+ZzK+zJ3BT3jwYY9iwfjP/e35wpmd75dNxhG7czonTZ2j29ECe7daGwU/fzwdjpxITG0sO\nHx8GP30/APWr3snysI3c228IuXLELcm/7LGBn7I74iDnLlyi2dMDebv3g9StfEem/3su+2HClzRs\nUJtChfzZvTOUt4d8xNhxk9J+oEPq1qnOIw93Zd36TYSGxP3SGzjwfebO+93hZCkLDglj2rTZBAfP\nJzo6mrVrNjJq9I9Ox0pVVnufY2JieO75N5kz+ye8XC7GfT+ZTZs8v8B47oWBjP/+c3Lk8GHXrj30\nfPJFpyN5HGNML6BXoqaR1tp0VerGmAFANHD5B24/cLO19qgxphow3Rhz17/O5sSqn2tCGHMvUNda\n+0Z6H5PHr6zzwd0QYz18HWIycnn5OB3BbQf+9PzzmCSWO7CH0xGyhTRnV3qYLPXlJpkq+lJEpn6c\nj9/XKMM/jgWmLEnz32CMKQPMstZWTNT2OPA00NRam+yJ7YwxS4CXgAhgsbX29vj2B4BG1tpUTybn\nEavPrLWz3SmIREREJPswxrQCXgHaJy6IjDGFjTFe8bdvIW5C9U5r7X7glDGmVvyqs0eBGWm9TrY/\no7WIiIikwIFBDmPMRKARUMgYsw8YTNxqs5zAb/Er61fFrzRrAAwxxkTFp33GWnt5kvazxK1k8yVu\nDlKaqwuuuyiKH8PzB5Zbay9c7/OJiIiIZ3DigrDW2geSaU72mjTW2qnA1BT2hQIVk9uXknQPnxlj\nXoo/n1Ditp+AYGAesN4YU9SdFxcRERHxFO7MKbof2HP5jjGmSXzbJOKW1hcnbrxPRERE/gs8c0n+\nDePO8FkZ4sbmLutI3FK4h6211hhTCGgP/C/D0omIiIhkEnd6inID5xPdbwIstFfW9G8iHSdGEhER\nkazBxmb85sncKYoigLsBjDGlgTuBxGefLgBczLhoIiIi4igNn6VoJvCsMcYbqElcATQ70f6KwO6M\niyYiIiKSedwpioYA9xC37v8i8Ly19iCAMcYX6EQKS+ZEREQk6/H04a6Mlu6iyFp7HGhqjMlL3MVb\no646pCGJVqeJiIiIZCXunKdokDGmorX21NUFkbX2PHEXaOuX0QFFRETEIdlsTpE7E63fIm74LCUV\niTsVt4iIiEiWk5HXPstFXG+RiIiI/AdoTlEi8fOH8idqKmiMuTmZQ/2Bh4C9GZhNREREHKSiKKkX\ngEHxty3wafyWHIMu8yEiIiJZVFpF0ZL4/xriiqNfgHVXHWOBM8Aqa+2fGZpOREREHKOeokSstUuJ\nP2t1/Fmsv7HWrs6MYGm5FHP1GQE8W2zC1VCyjuiYrDdF7KbqPZ2O4JbzkcudjuA234D6TkdwW9b7\n6RMRJ7hznqInbmQQERER8TDWOJ0gU6VYFKUwoTpN1lqdwFFEROQ/QMNnV+zm3/U6e/27KCIiIiLO\nSa0oGoKG4kVERLItG6vhMwCstW9lYg4RERERR2XkGa1FRETkP0RzilKQ3onXmmgtIiLy32C1+ixF\nu0nfHCNNtBYREZEsx52iKLmJ195AOaADsB6Ym0G5RERExGEaPktBahOvjTG3ACuB0AzIJCIiIpLp\nMmSitbV2pzHmW+BtYHZGPKeIiIg4K7styXdl4HNFAHdm4POJiIiIZJqMXJLfETiegc8nIiIiDsqC\n1zK/Lu4syR+Uwi5/oAlQEfgwI0KJiIiI87Lb8Jk7PUVvpbLvAPAm8MF1pRERERFxiDtFUdlk2ixw\nzFp7JoPyiIiIiIdQT1EKrLX/3MggIiIiIk66rtVnxhhvY0wXY8xTxphiGRUqs5QsWZwF84NYu+Z3\n1oQtom/fngC8996brF+3hL9Cf2NK0Gjy5cvrcNLk5cyZk5V/zOKv0N9Yu+Z3Bg/6n9OR0tSvb0/C\nwhaxZs3v9O/3pNNxkjXy24/Yt3cNYX8vTGj78YevCAmeT0jwfLZuWUlI8HxHsr357sc0uPd+Oj78\nTEJb+LadPNTrBTo90ps+rwzmzNmzAKzftIUuj/Why2N96PzYsyxc+gcAu/7Zl9De5bE+1GzemQmT\nf3Hk3wNw663lCA1ZkLAdOxLusZ+Ny7Liz17JkgEsXDCFdWsXs3bN7/SL/77zZC1bNGLjhmWEb1rB\nKy/3cTpOumTFzKmxNuM3T2ZsOhMaYz4EGltrq8ffN8BioD5ggKNALWvtjhuUNYkcOUte91tbrFgR\nihUrwpo1G8iTJzerV82la9eelChZnMWL/yAmJoZ3h74BwBsD3r2u14q9QZ+E3Ln9OHv2HN7e3ixb\n8gsvvDiY1cF/Z8hzZ3Sn6V133cYPP3xFnTr3culSFLNn/Uifvq+xY8fuDHuNuI/l9alXryZnzpxl\n7JhPqVK12TX7P/hgIKdOnmbou59e92udjVjm1vGha9bj5+vLG+98xPQfvgGge8/+vNT3SapXuYdp\ns+YTEXmQfr0e5fyFC/h4++Dt7cXhI8fo8tiz/D7jR7y9r1yJJyYmhiYdH2HiqE8IKFY0XRl8A+q7\nldkdLpeLPbv/ok69tuzZE3HDXicj3MifvRuhWLEiFC9WhLD477vg1fPo0rUHmzdvczpaslwuF5s3\nLqdVmwfYt28/q1bO4eFHnvXYvJA5maMvRWTqeNbOu1tk+C+vW9Yv8NgxOXd6iloByxPdbwc0AIYB\nD8a3vfZvQhhj6hljXjTGtPg3j/+3Dhw4xJo1GwA4c+Ys4eHbCChRjIULlxETEwPA6tV/U6JE8cyM\n5ZazZ88B4OPjjbePD+ktcp1w++0VCAkO4/z5C8TExLBs+So6dmztdKxrrFixmuPHT6S4v2uXdkwO\nmpGJia4IrHw3+fLelKTtn70RBFa+G4Da1avy29IVAPjmypVQAF28dAmSKRhXha6hVIni6S6IbrSm\nTeqxc+c/Hl8QQdb62YO477uwq77vSgR4bgd/jepV2LFjN7t27SEqKoqgoBm0b9fS6VipyoqZJSl3\niqJSQOJytx2wy1r7mrV2EvAN0DQ9T2SMCU50+yngC+AmYLAx5l8VVterdOmSVKpUkeDgsCTtjz/e\nnfnzFzsRKV1cLhehIQvYH7GORYuWERwSlvaDHLJxYzh169XE378Avr65aN2qCaVKBjgdyy316tXk\n0KHDbN++y+koCcqVLc3vy1cCsGDxcg4cPJKwb93GcDo89DSdHu3NoJf7JuklApi7aCltmjXM1Lyp\n6datA5MmT3c6RrpkpZ+9q5UuXZLKlSqyOthzMweUKMbefZEJ9/dF7CfAg4s4yJqZ02KtyfDNk7lT\nFOUAohPdbwwsTHR/J5DeLhWfRLd7Ac2ttW8DLYCH3MiUIXLn9mPypJG89NJbnD59ZSHda6/2Izo6\nhp8mTsvsSOkWGxtLYPUWlC4bSPXAKtx1121OR0pRePh2Phr2JXPn/MTsWT+ydu1GYmKy1tUGu3fv\n4FgvUUreeeMFJk2bRbce/Th77jw+PlfWT9xz1+3M+PFbJo0ewegJQVy8eClhX1RUFEtWrKZFkxs3\nHOYOHx8f2rVtwc9TZzkdJV2y0s9eYrlz+xE0eRQvvjQ4yfediLhXFO0FagMYY+4CbgGWJtpfBEjv\nT5jLGFPAGFOQuHlNhwGstWdJWnglYYzpZYwJNcaExsacdSN6yry9vZk8eSQTJ/3C9BlzE9ofeeQ+\n2rRpxqOP9c2Q17nRTp48xZKlf9CyRSOno6Rq7LhJ1KzVmiZNu3D8xEm2bdvpdKR08/LyomOH1kyZ\nMtPpKEncUroUoz59l6Axn9OmWUNKJTPcW67Mzfj5+rJt5+6EtuWrQrnj1nIU8i+QiWlT1qpVY8LC\n1nPo0JG0D/YgWeVnD+K+76ZMHsXEib8wffrctB/goMiIA0l6kkuWKE5k5AEHE6UtK2ZOi43N+M2T\nuVMUTQIeM8bMAmYBp4A5ifZXAdI7yTof8BcQCvgbY4oDGGPykMr8XmvtSGttoLU20OWV243oKRv5\n7UeEh29nxIhRCW0tWjTipf/1pnOXJzh//kKGvM6NUKiQf8LKuFy5ctGsaQO2bMmUee7/WuHCBQEo\nVSqAjh1bM3GSc6ue3NW0aX22bNlBRMR+p6MkcTR+/lNsbCzffj+Jbh3bALAv8gDR0XFz4yIPHGTX\nP3spUfzK3KE5vy2hTfNGmZ43Jfd375hlhs6y4s8ewKiRw9kcvp1PR4x0OkqaQkLXUL58WcqUKYWP\njw/dunVg5qwFTsdKVVbMnJZYazJ882TunLzxPeLmFXUETgKPWmtPABhj8gHtgU/S80TW2jIp7IoF\nOrmR6brUqVOdhx/uyvr1mxOWWA8c9AEffzyEnDlyMHfORABWB/9N376vZ1asdCtevChjvvsULy8X\nLpeLn3+eyew5C9N+oIOCJo/Cv2ABoqOi6d9/ACdPnnI60jUmjP+CBg1qU6iQPzt3hDDkneGMGzeJ\nbve1Z3KQs7+0Xx78PiFh6zhx4hRNOz7Msz0f4dz580yaFjfk1KxhHTrdG7de4e91G/luQhDe3t64\nXIY3X+pDgfz5ADh3/gIrQ8IY/Ep/x/4tifn5+dKsaQN6P/uq01HSJSv+7NWtU51HHu7KuvWbCA2J\n+0U9cOD7zJ33u8PJkhcTE8Nzz7/JnNk/4eVyMe77yWzatNXpWKnKipklqXQvyU/1SYxxETdR+py1\nNuq6nzAdMmJJfma6UUvybyTPrueTlxFL8jOTu0vyPcGNXJIvIqnL7CX5W25vneG/vG4Ln+uxX9Tu\n9BSlyFobS1zvkYiIiEiW5NYZrY0xpYwxY4wx+4wxl4wxTeLbC8e3V78xMUVERCSz2ViT4ZsnS3dR\nZIwpS9zE6C7ARiDhhCfxq8cCAc8+N7+IiIhICtwZPhtK3EToisB54NBV++cQd0JHERER+Q/IgtNh\nr4s7RVEz4HNr7d748wtd7R+gZMbEEhEREad5+nBXRnNnTlFeILUTtOQggyZui4iIiGQ2d4qYvcBd\nqeyvBWy/vjgiIiLiKTz9ZIsZzZ2eomlAD2NMxURtFsAY0wW4DwjKwGwiIiKSzcSvZj9kjNmQqM3f\nGPObMWZb/H8LxLcbY8xnxpjtxph1xpiqiR7zWPzx24wxj6Xntd0pioYC+4DVwA/EFUSvGWNWElcM\nrQWGu/F8IiIi4sHSc9V7d7d0GAe0uqrtNWCRtbYCsCj+PkBroEL81gv4GuKKKGAwUBOoAQy+XEil\nJt1FkbX2FHEXhB1N3PJ7AzQHbgO+Ahpbaz33QmEiIiLiFmszfkv7Ne0y4NhVzR2A7+Nvf0/cJccu\nt4+3cVYB+eOvp9oS+M1ae8xaexz4jWsLrWu4NTE6vjB6DnjOGFOYuMLosM2Ia4WIiIjIf54xphdx\nvTqXjbTWpnWV4qLW2suLvQ4Al69uXYK4Oc+X7YtvS6k9VekqiuKvXv8r8KO19jtIOGGjiIiI/Efd\niInW8QVQWkVQao+3xpgb0hmTruEza+0ZQJfwEBERESccjB8WI/6/l08gHQGUSnRcyfi2lNpT5c5E\n6zXAHW4cLyIiIlmYQxOtk/MrcHkF2WPAjETtj8avQqsFnIwfZpsPtDDGFIifYN0ivi1V7swpGgz8\nYoyZba1d7MbjREREJAtyYsawMWYi0AgoZIzZR1z98T4QZIzpSdwVNLrFHz4HaEPceRLPAU8AWGuP\nGWPeAULijxtirb168vY13CmKHgb2AAuNMWuBrfEBErPW2p5uPKeIiIhIAmvtAynsaprMsRbok8Lz\njAHGuPPa7hRFjye6XTl+uyYDoKJIRETkPyC7ndE63UWRtdad+Uc3nJfLy+kIbomNiXY6gtuy4nkW\nstrZIXwD6jsdwW2fFW3sdAS39T+YtUb8s+Kvoaz1kyeSPF3AVURERJJ1HROjsySP6v0RERERcYp6\nikRERCRZmlMkIiIiQvabK6bhMxERERHUUyQiIiIpyG7DZ+opEhEREUE9RSIiIpKC7LYkP8WiyBiz\n8188n7XWlruOPCIiIuIhYp0OkMlS6ynaQ/abeC4iIiLZVIpFkbW2USbmEBEREQ9js+RFZ/49TbQW\nERERQROtRUREJAWx2WwSjVtFkTGmHPACUBMowLU9TZpoLSIi8h8Rq+Gz5Blj7gb+Bp4EcgC3AGeB\nXEAZIIa4ydkiIiIiWY47c4qGAJeASkDT+LbnrLUBwNNAfqBPxsYTERERp1hMhm+ezJ2iqB4w0lq7\nhStL9Q2AtXYUMBd4P2PjZQ6Xy8XKlXOYOnUMAGPHjmDt2t8JDV3AN98Mw9vbc6de5cuXl8mTRrJh\n/VLWr1tCrZrVnI6UJpfLRUjwfGb88r3TUdJF73HGyH9LcbrNG5qwPblpFPf0bEntAQ/wwOIP6b7g\nXVqNep4cef0AKFL5CnaWtAAAIABJREFUlivHzx9K2VaBDv8LrihZMoCFC6awbu1i1q75nX59ezod\nKVmjRg4nYt9awsIWJbQVKJCfuXMmsmnjCubOmUj+/PkcTJi6li0asXHDMsI3reCVlz3/b+5RI4cT\nuW8taxK935K1uFMU3QTsiL99Kf6/uRPt/4O4winL6du3B1u2bE+4P2nSdCpVakJgYAt8fXPyxBP3\nO5gudZ98PIT58xdT8e6GVK3WnM3h25yOlKb+/Z4kPAvkvEzvccY4sXM/Qa0GENRqAFPavEn0+Yvs\nnBfKvuXrmdTsNSa3eIMTO/dTtU87AI6F72PKvQMJajWAWY8Mo+F7T2C8PGPBbPT/t3fncVbO/R/H\nX59pihZb2pdbUdluKiokKa1o4UbpVpSl264bd9x27tttDfGzFdrcqombilKiKLRRaU+bmqZpIwrR\nzHx+f5zTmOrM2pm5zum8nx7XY865lnO9z+V05jPf7/e6rowM/tH/YU5t2JqzW3Tmhht6c+KJ9YOO\ntZ9hw1Po1OmKveb1738Tn0ydwUknt+CTqTPo3z82i42kpCSeH/gonTr35JSGrene/aKYPMY5DR+e\nwoX7HO94l1UMUywrzDfMJqAagLvvIDSeqEGO5UcBpaIXrWTUrFmNjh3PY8iQUdnzJk2amv147twF\n1KxZPYho+Tr88MM4p8UZvDFkJAC7d+/mxx9/CjhV3mrWrM4F57fhjTdGBh2lQHSMi0etFifz43eb\n2blhG+s/W4Rnhr4qN81bRYXqFQHI2PV79vxSh5SOqUvJpqdvZt78RQDs3Pkzy5Z9S80a1QJOtb8Z\nM2bx/Q/b95rXuXMHRowYA8CIEWPo0qVjENHy1axpY1atWsuaNevYvXs3KSlj6dK5Q9Cx8jQ9wvGW\n+FKYomg+kLP9+lPgNjNraWatgJuBBQV5ITM7w8wODz8ua2YPm9l4M3vCzEq0Lfeppx7k3nv/Q1bW\n/vVrcnIyPXr8hY8+mlaSkQqsbt0/sXXrNl5/7VnmzJ7Eq688RblyZYOOladnBjzM3f/8d8TjHYt0\njItHvS5n8e3YL/ebf2K3lqyb+k328yqNjuPyKY9z+UeP8ek9Q7KLpFhyzDG1aNTwz8yaPS/oKAVS\ntUol0tM3A6HirmqVSgEniqxGzWqsT03Lfp66YSM1YrDwPNhpTFHu3gIqmdme3wj3A0cAU4GPCQ20\nvqeAr/UG8Ev48cDw6zwRnjekEJkOyPnnn8fmzduYN29RxOUDB/6bzz+fxeefzympSIWSXKoUjRuf\nwquvDqdpsw78/PMv3NX/5qBj5erCC9qyefNWvp63MOgoBaZjHH1JpUtRp91prPpg1l7zT7+lC1mZ\nWax49/PseZvnr2JU27t5u9MDnHZT51CLUQwpX74cKaMHc/udD7Jjx86g4xSJeww1wUnMUfdZLtx9\ntLu3dPdfw8/nAScTum7RrcCp7j6joPt194zw4ybu3s/dZ7j7w4RO9Y/IzPqa2Vwzm5uRceBfQGed\n1YROndqybNkMhg9/gVatmvPGG88BcM89t1G5ckX69//XAe+nuKRu2Ehq6kZmzwn9hfq//31A40an\nBJwqd82bN6Fzp/asXDGT/775Eq1bn82woc8HHStPOsbR96fWDdm6aC2/bv2jG/L4y87hmDaNmXLL\nSxG3+WFlGrt/3kXF42uVVMx8JScnM2b0YEaOfJf33psYdJwC27R5K9WqVQGgWrUqbN6yLeBEkaVt\nSKd2rRrZz2vVrE5aWnqAiSQRHNCoRXdf7+7Pu/uL7r66EJsuMrM+4ccLzKwJgJk1AHbnsb9B7t7E\n3ZskJ1c4gOQhDzzwJPXqnckJJ7TgyitvYdq0L7j66n707n057dqdy5VX3hLTf0Vt2rSF1NQ0GjQI\nXS/zvPNasHTpioBT5e7e+x6nzrFNqNfgTK7oeSNTp37OVb1vDTpWnnSMo69+1727zmq3OpXG13di\nwtXPkLHr9+z5h9WunD2wukLNozmqXg12rN9S4nlzM3jQAJYuW8lzAwcFHaVQ3h8/mV69LgOgV6/L\nGD9+UsCJIpszdz716tWlTp3alC5dmm7dujL+/clBx0o4idZSFNS55tcCA83sPmAr8KWZrQfWh5cF\n6oUXHmXdug1Mm/YuAGPHfshjj8XWX9t73Pb3+xk+7AXKlCnNmjXruOba24OOdNDRMY6e5LKHUPuc\nP/Pp3W9kz2v5r6soVSaZLm/dDcCmr1fy6T1DqN60Aafd2JmsjEw8y/ns3qHs+iE2uqjObt6UXj0v\n5ZuFS5g7J/SL+v77H2fih58EnGxvI0a8yLktz6JSpYqsWT2XRx55miefepGRb71Cn949WLculR5/\nvT7omBFlZmZyW7/7mPDBW5RKSmLosNEsWRK7f5AAvJnjeK9dPZeHH3maIUNH5b+hxAwraEuImRXk\nX7u7e5v8V8t+zcOBuoSKs1R331TQbcuWPSZ2m3Ai2J2Zkf9KInHg+aqtg45QaLdumpr/SjEktoei\nRhZXX8hxLOP3DSX68figao+o/6+9cNPImP2IF6al6Fj2/9wnA9UJdcNtJXSafoG5+08U8Iw1ERER\nKVlZMVu+FI8CF0XuXifSfDM7BLgd6AOcG51YIiIiIiXrgC8P6+6/uftjwCzgmQOPJCIiIrEgC4v6\nFMuiec38GUBsX25UREREJBfRPPusLlAmiq8nIiIiAUq0AfQFLorM7E+5LKoItCV0AcdpUcgkIiIi\nMSDWrysUbYVpKVpL7kWjAcsJFUYiIiIicacwRdEj7F8UOfA9sAKY4u6JVlSKiIgctLIstgdGR1th\nTsl/qBhziIiIiASqwGefmdkbZnZGHsubmdkbuS0XERGR+OLFMMWywpyS3xs4Lo/ldYGrDiiNiIiI\nSECieUp+efK4w72IiIjEl0QbKJxnURQ+Db9OjlknmFnLCKtWBG4AVkYvmoiIiARJ9z7bWx/gQf7o\nCrw3PO3LCBWUfaKaTkRERKSE5FcUvUfo+kQGvAEMAr7cZx0HdgJz3H19tAOKiIhIMGL9XmXRlmdR\n5O4LgAUAZnYM8D93X1gSwURERERKUmGuU/RwcQYRERGR2BLrp9BHW2HuffYwcIm7/zmX5d8AKe7+\n72iFy0tGZkZJ7CZqEqsBUgoqHr9wbt00NegIhfZc1dZBRyiUfnF4jOXglGgDrQtznaKLgY/yWP4R\ncOmBxREREREJRmGKorrAsjyWLw+vIyIiIgeBrGKYYllhiiKAI/NYdhRQ6gCyiIiISIIzs+PNbH6O\n6Scz62dmD5nZhhzzL8ixzT/NbKWZLTezDkXdd2GKosVA11zegAFdyLslSUREROJIEPc+c/fl7t7I\n3RsBpwO/AO+GFz+7Z5m7TwAws5OAy4GTgY7AS2ZWpEaawhRFrwNnmtlQM6u8Z2b48RvAmeF1RERE\n5CCQZdGfCqkNsMrdv8tjna7AKHf/zd3XELq7RrOivN8CF0XuPhh4C7gSSDezVDNLBdIJ3Qg2xd1f\nLkoIERERSQxm1tfM5uaY+uax+uXAyBzPbzazb8zsDTM7KjyvJpDz4tGp4XmFVqgxRe7eMxzwfeDH\n8DQO6ObuPYoSQERERGJTcQy0dvdB7t4kxzQo0r7NrAyhoTljwrNeBo4DGgEbgQHRfr8Fvk7RHu6e\nAqREO4iIiIhIDucDX7v7JoA9PwHMbDChBhqADUDtHNvVCs8rtMKefSYiIiIJIuBT8nuQo+vMzKrn\nWHYxsCj8eBxwuZkdYmZ1gfrA7MLtKqTQLUVm1gQ4g9Ap+PsWVe7u/ypKEBEREREAMysPtAP+lmP2\nk2bWiNBJbGv3LHP3xWaWAiwBMoCb3D2zKPstzG0+ygL/A9oTumuF88fdKzzHPBVFIiIiBwEP6DYf\n7v4zcPQ+83rlsf6jwKMHut/CdJ89QKggehRoTagIuopQn990YA5w0oEGEhERkdigK1rn7lJgjLs/\nwB/9eBvcfRLQFigD9I5uPBEREZGSUZiiqDbwafjxnr66MgDunkFoMNTl0YsmIiIiQVJLUe528McY\npB2E3luNHMt/BKpFKZeIiIhIiSpMUbQKaAAQHtW9mFCX2p57n/2Fva8oKSIiInEsiHufBakwRdEU\n4JIcN1l7FehoZquAbwmNK9K9z0RERA4SMXDvsxJVmKLocf446wx3fwm4k1C32Q/APcCT0Q5YnAYP\nGsCG1AXMm/dx9ryjjjqSiRNGsmTxDCZOGMmRRx4RYML9HSyZL7mkE/Pnf8Jvu9Zz+mmnBphuf/F4\njHOqVasGUyaP4ZsFU1kw/xNuufmaoCPlqUGD45g7Z3L29P3WZdx6y7VBxwLgyGOr0/3DR7OnvksG\n0/CaDhx3YTN6THmcm74bTpVT62avf1itSlz/7RvZ67f6T58A0+9v5YqZzPt6CnPnTGbmlxOCjpOv\nDu1bsXjRZyxbMoP+/7gp6DgFEo+Z5Q+FuSHsTndfHh5UvWfeM+5+mrs3dfcn3D3WW8b2Mmx4Cp06\nXbHXvP79b+KTqTM46eQWfDJ1Bv37x9aH+mDJvHjxMrp1u47p02cGlCp38XiMc8rIyOAf/R/m1Iat\nObtFZ264oTcnnlg/6Fi5WrFiFU2atqdJ0/Y0O6Mjv/zyK++NnRh0LAC2r97I6I73MrrjvaRccB+7\nf/2N1R/O5fvlqUzsO5C0Wcv32+bH7zZlbzPtniEBpM5b23aX0aRpe84864Kgo+QpKSmJ5wc+SqfO\nPTmlYWu6d78opj/HEJ+Z86OB1iXAzG41s9r5r1m8ZsyYxfc/bN9rXufOHRgxInTvuREjxtClS8cg\nouXqYMm8bNlKVqxYFVCivMXjMc4pPX0z8+aHrpqxc+fPLFv2LTVrxMc5EG3Oa8Hq1d+xbl2RbltU\nrGq1OJmfvtvMjg3b+GFlGttXbww60kGtWdPGrFq1ljVr1rF7925SUsbSpXOHoGPlKR4zy96CuvfZ\nv4BZZjbdzG40s8oB5dhP1SqVSE/fDIR+uVStUingRPmLx8zxJl6P8THH1KJRwz8za/a8oKMUSLdu\nXRk1+r2gY0RUv8tZrBj7Zb7rHV67Mt0n/puLx9xL9WbHl0CygnN3Jk4YyayZE7n2mivy3yBANWpW\nY31qWvbz1A0bqRHjxX08Zs5PorUUFfreZ1GyGjid0ODs7sDDZvYVoWsd/c/ddwSUaz9x1iMIxGfm\neBMPx7h8+XKkjB7M7Xc+yI4dO4OOk6/SpUvTuVN77r3vsaCj7CepdCnqtjuNLx8fned6P2/ezrAz\n+rFr+04qn1KHC177O2+1uZvdO38toaR5O7f1xaSlpVO58tF8OHEUy5evZPqMWUHHkhgW+9900RVU\nS5G7e5a7T3b3awhd7+gloCOhgikiM+trZnPNbG5W1s/FEmzT5q1Uq1YFgGrVqrB5y7Zi2U80xWPm\neBNvxzg5OZkxowczcuS7vPdebIzPyU/Hjq2ZN28hmzdvDTrKfo5p3ZAti9by69af8lwv6/cMdm0P\nFaBbFq7lp+82c9SxsdNSkJaWDsCWLdsYO3YiTZs2CjhR7tI2pFO71h+XwqtVs3p2/lgVj5llb0EV\nRXudlOfuu919nLv3AI7JbSN3H+TuTdy9SVJS+WIJ9v74yfTqdRkAvXpdxvjxk4plP9EUj5njTbwd\n48GDBrB02UqeGzgo6CgFdnn3i2K366zrWXxbgK6zQysehiWFvt4O/1NljqhblR/XbS7ueAVSrlxZ\nKlQon/24XdtzWbx4/4HisWLO3PnUq1eXOnVqU7p0abp168r49ycHHStP8Zg5P4l2Sr4F0Q1gZg3c\nfcWBvEbpMjUPOPiIES9ybsuzqFSpIps2beWRR55m7LhJjHzrFWrXrsm6dan0+Ov1/LDPoNsgHSyZ\nv/9hO889+28qV67I9u0/sWDBYi7sFBtjHEryGBfHv76zmzfl02nv8c3CJWRlhfZw//2PM/HDT4ph\nb9FRrlxZ1qyaQ/3jz+Knn6Lfe/5c1dZF3ja57CH0nvUcw8++nd93hLrBju3YhJaPXEnZiofx20+/\nsHXJd4zr+STHnd+UZndcQlZGJp7lzH7mHdZOKfx4rn6bphY5b27q1v0Tb48JXUouObkUo0a9x2OP\nPx/1/UTT+R3PY8CAhymVlMTQYaNjPi8Uf+aM3zeUaFnx5DE9o/411f+7N2O2NAqkKIqGaBRFIkHT\nh7hkHEhRFITiKIrk4FDSRdHjxVAU3R3DRVFQ3WciIiIiMSWos89EREQkxiVaa7aKIhEREYkoK8HK\nInWfiYiIiKCWIhEREclFrF+BOtrUUiQiIiKCWopEREQkF4k1okhFkYiIiORC3WciIiIiCUgtRSIi\nIhJRrN+rLNrUUiQiIiKCWopEREQkF4l28UYVRSIiIhJRYpVE6j4TERERAdRSJCIiIrnQKfkiIiIi\nCUgtRSIiIhKRBlrHiUOSywQdoVB2ZfwedASRqEiy+LtwSb9NU4OOUCjtqzUMOkKhTU5fEHQEKQaJ\nVRKp+0xEREQEiOOWIhERESleGmgtIiIikoDUUiQiIiIRJdpAa7UUiYiIiKCWIhEREclFYrUTqSgS\nERGRXGigtYiIiEgCUkuRiIiIROQJ1oGmliIRERER1FIkIiIiuUi0MUUqikRERCQiXadIREREJAGp\npUhEREQiSqx2IrUUiYiISIwxs7VmttDM5pvZ3PC8imb2kZl9G/55VHi+mdnzZrbSzL4xs9OKul8V\nRSIiIhJRFh71qRBau3sjd28Sfn438LG71wc+Dj8HOB+oH576Ai8X9f0mfFG0eOl0Zs2eyBczP+Cz\nGWMBuP+B25k5KzRv7LjhVKteJeCUkQ0eNIC01AXMn/dx0FEKLN4yN2hwHHPnTM6evt+6jFtvuTbo\nWPnq0L4Vixd9xrIlM+j/j5uCjrOfWrWqM3lSCgvmf8L8eR9z883XAPDYY/ex8JtpfDX3I8akvMYR\nRxwecNLcrVwxk3lfT2HunMnM/HJC0HEAKH1IaZ4d9yz/9+H/8fKUl7ni9isAePLtJ3lh4gu8MPEF\nRswZwf2D78/e5pQzT+GFiS/w8pSXeSLliaCiRxTrn+NI4jFzXrKKYToAXYFh4cfDgItyzB/uITOB\nI82selF2YO7x2WNYoVzdqARfvHQ6LVt0Ydu2H7LnHXZYBXbs2AnADTf05oQT63Hbrfcd0H52Zfx+\nQNtHck6LM9i582eGDBlIo8Ztov76xSEeM++RlJTEurVf0bxFJ9at2xB0nFwlJSWxdPF0Ol7Qg9TU\njcz8cgI9e93I0qXfRuf1zQ74NapVq0K1alWYP38RFSqUZ9bMiVx66TXUrFWdqVM/JzMzk/88eg8A\n99z7nwPeX1YxfM+tXDGTM846f6/vjmhpX61hkbc9tNyh7PplF6WSS/H0O0/zykOvsHze8uzl975y\nL19+9CWfvPMJ5Q8vz4B3B3B/r/vZkraFI44+gh+3/Vik/U5OX1DkzJEU9+e4OJRE5ozfNxz4P8BC\nuK7OZVH/xzN47Zh834OZrQF+IDSs6VV3H2Rm2939yPByA35w9yPN7H3gcXefEV72MXCXu88tbLaE\nbymKZE9BBFCufFlitXCcPmMW3/+wPegYhRKPmfdoc14LVq/+LqYLIoBmTRuzatVa1qxZx+7du0lJ\nGUuXzh2CjrWX9PTNzJ+/CICdO39m2bJvqVGzGlOmfEZmZiYAs2Z9Tc2aRfpjL6Ht+mUXAMnJyZRK\nLrXXSNmyFcpy6tmn8uWkLwFo1bUVX0z8gi1pWwCKXBAVh3j4HO8rHjPnx4vhPzPra2Zzc0x9I+y6\nhbufRqhr7CYza7lXrtAv5qj/cg6kKDKzMmZ2pZm1DT//q5n9n5ndZGalSzKLuzN2/HCmfz6OPlf3\nyJ7/4EN3smzF53Tv3pV//+vZkowkMapbt66MGv1e0DHyVaNmNdanpmU/T92wkRo1qgWYKG/HHFOL\nhg3/zOzZ8/aa37t3dyZNmhpQqvy5OxMnjGTWzIlce80VQcfJlpSUxAsTX+CteW8xb8Y8ls//o5Xo\nrA5nseDzBfy681cAah5bkwpHVODx0Y8z8IOBnHfJeUHF3k+8fY4hPjMHwd0HuXuTHNOgCOtsCP/c\nDLwLNAM27ekWC//cHF59A1A7x+a1wvMKLaiWoiHAhcBtZjYCuAyYBTQFXivJIO3aXkaL5p35y0V9\n6Nu3F2ef3QyAhx96mhManM3o0WP52/VXlmQkiUGlS5emc6f2vP3O+0FHOaiUL1+O0aMGceedD+3V\nQnv3XbeQkZHJWyP/F2C6vJ3b+mKandGRTp17csMNvTmnxRlBRwIgKyuLW86/hSvPuJIGDRtwTINj\nspe16tKKT8d+mv28VKlS1DulHg/2fpD7e95Pj1t7ULNuzSBiS4wKYkyRmZU3s8P2PAbaA4uAccBV\n4dWuAsaGH48DrgyfhXYm8KO7byzK+w2qKDrF3bsDFxN6s5e6+wigD9A4t41yNrntztgRlSAb0zYB\nsGXLNsaPn8TpTfbuyx89aixdu3aMyr4kfnXs2Jp58xayefPWoKPkK21DOrVr1ch+XqtmddLS0gNM\nFFlycjKjRw9i5Kh3eW/sxOz5vXpdxgUXtOXKq24OMF3+9hzTLVu2MXbsRJo2bRRwor39/NPPfPPl\nN5ze6nQADj/qcBo0asDsT2Znr7M1fStfffYVv/36Gz/98BOLZi2i7kl1g4q8l3j5HOcUj5ljVFVg\nhpktAGYDH7j7h8DjQDsz+xZoG34OMAFYDawEBgM3FnXHQRVFSWZWBjgMKAccEZ5/CJBr91nOJrfS\nyYcdcIhy5cpSoUL57MfntTmHJUuWc9xxdbLX6dSpHStWrD7gfUl8u7z7RXHRdQYwZ+586tWrS506\ntSldujTdunVl/PuTg461n0GvPs2yZSsZOHBw9rz27Vtx5x038JdL+vDrr7sCTJe3fb872rU9l8WL\nl+ezVfE7vOLhlD88lKvMIWVofE5jUlelAtDiwhbM/ng2u3/bnb3+zMkzObnpySSVSuKQQw/h+MbH\ns/7b9YFk31e8fI5zisfM+SmOMUX57tN9tbs3DE8nu/uj4fnb3L2Nu9d397bu/n14vrv7Te5+nLuf\nUpQB1nsEdUXr14FlQCngXmCMma0GzgRGlVSIKlUqMXLUqwAkJ5ciJWUcUz76jP++9RL16x9LVpaz\nbv0Gbrv13pKKVChvjniRc1ueRaVKFVm7ei4PP/I0Q4aW2OErknjMXK5cWdq2ackNN94VdJQCyczM\n5LZ+9zHhg7colZTE0GGjWbJkRdCx9tK8eVN69ryUhQuXMmf2JADuf+AJnnnmEQ4pU4aJE0YCMGv2\n19x88z+DjBpR1aqVeXvM60Dou2PUqPeYNHlasKGAilUqcsczd5BUKglLMqa/P53ZH4dahlp2bsmY\nl8bstf76lev5atpXvDT5JbKyspg0ahLfrfguiOj7iYfP8b7iMXN+Eu2GsIGdkm9mNQDcPc3MjiTU\nFLbO3WfnvWVItE7JLynFcUq+SBCicUp+SSuOU/KL04Gckh+UaJ+SL5GV9Cn5V9W5JOr/eIatfSdm\nv0QCu/eZu6fleLwdeDuoLCIiIrK/ePuD4kDpOkUiIiIiBNhSJCIiIrEtsdqJVBSJiIhILgp5A9e4\np+4zEREREdRSJCIiIrkoyHWFDiZqKRIRERFBLUUiIiKSi0S7eKOKIhEREYlIA61FREREEpBaikRE\nRCQiDbQWERERSUBqKRIREZGIEm2gtVqKRERERFBLkYiIiOTCPbHGFKkoEhERkYh0Sr6IiIhIAorb\nlqJdGb8HHUEkIWUlWHN6ECanLwg6QqF1rnZa0BEKZXz610FHiAsaaC0iIiKSgOK2pUhERESKV6Jd\nvFFFkYiIiESkgdYiIiIiCUgtRSIiIhJRol2nSC1FIiIiIqilSERERHKRaKfkqygSERGRiBLt7DN1\nn4mIiIigliIRERHJhU7JFxEREUlAaikSERGRiHRKvoiIiEgCUkuRiIiIRJRoY4pUFImIiEhEOiVf\nREREJAGppUhEREQiytJA68Q0eNAA0lIXMH/ex0FHKZQO7VuxeNFnLFsyg/7/uCnoOPmKt7ygzCUh\n3vLq+yL6kpKSGDDhOe4d8gAAVWpX5YmxT/PSZ69yx4v9SS4d+hu+9aVtGDrvTZ6ZOJBnJg6k7eXt\ng4y9n1g+xpI/FUVhw4encGGnK4KOUShJSUk8P/BROnXuySkNW9O9+0WceGL9oGPlKt7ygjKXhHjL\nC/q+KA6dru5M6srU7OdX/rM3418by40t/8bPP+6kTfd22cs+Hz+d28+/jdvPv40poyYHETeiWD/G\nReHFMMWywIoiMzvWzO40s4Fm9oyZXW9mhweVZ/qMWXz/w/agdl8kzZo2ZtWqtaxZs47du3eTkjKW\nLp07BB0rV/GWF5S5JMRbXtD3RbQdXe1oTm/TdK8C55Tmp/LFhM8BmPr2x5zR4cyg4hVYLB/josrC\noz7FskCKIjO7FXgFOBRoChwC1AZmmlmrIDLFoxo1q7E+NS37eeqGjdSoUS3ARHmLt7ygzCUh3vLG\nq1g+zlc/dB3D/jOErKzQPdkPO+pwfv5pJ1mZoedbN27j6GpHZ69/5gXNeXbS8/zjlbs5unqlQDJH\nEsvHWAomqJai64Dz3f3fQFvgZHe/F+gIPBtQJhERKWFN2jTlx60/snrhqgKtP3fKbP7W/Br+3uFW\nFkyfz23P9CvmhIkt0VqKgjz7LBnIJNRKVAHA3deZWencNjCzvkBfACt1BElJ5UsiZ8xK25BO7Vo1\nsp/XqlmdtLT0ABPlLd7ygjKXhHjLG69i9Tif0OREmrZrxumtT6f0IWUod1g5rnnoOsofXoGkUklk\nZWZRqfrRbEvfBsCO7Tuyt50ycjJX/rN3QMn3F6vHWAouqJai14A5ZjYY+BJ4EcDMKgPf57aRuw9y\n9ybu3iTRCyKAOXPnU69eXerUqU3p0qXp1q0r49+PnUGH+4q3vKDMJSHe8sarWD3Obz4xnOvO6MPf\nzr6WATc/ycLWpcyDAAAVrUlEQVQvvuG52waw6MtvaH7B2UDojLPZk2cBcFSVo7K3bdquGakr1weS\nO5JYPcYHwt2jPsWyQFqK3H2gmU0BTgQGuPuy8PwtQMsgMr054kXObXkWlSpVZO3quTz8yNMMGToq\niCgFlpmZyW397mPCB29RKimJocNGs2TJiqBj5Sre8oIyl4R4ywv6vigJwx8byh3/15+//qMnaxav\nZsroUHFxYZ/ONG13BpkZmezcvoMX7hgYcNI/xNsxLohY7+6KNov1qi03yWVqxmdwEZGDUOdqpwUd\noVDGp38ddIQiyfh9g5Xk/prVODfqv2tnp31aou+hMHRFaxEREYlI9z4TERERCYiZ1TazqWa2xMwW\nm9lt4fkPmdkGM5sfni7Isc0/zWylmS03syJfHEotRSIiIhJRQENsMoA73P1rMzsM+MrMPgove9bd\nn865spmdBFwOnAzUAKaYWQN3zyzsjtVSJCIiIjHD3Te6+9fhxzuApUDNPDbpCoxy99/cfQ2wEmhW\nlH2rKBIREZGIgr54o5nVARoDs8Kzbjazb8zsDTPbc32GmkDOazOkkncRlSsVRSIiIhJRcVynyMz6\nmtncHFPfSPs2swrAO0A/d/8JeBk4DmgEbAQGRPv9akyRiIiIlBh3HwQMymud8N0t3gH+6+7/C2+3\nKcfywcD74acbCN0/dY9a4XmFppYiERERiSiI7jMzM+B1YKm7P5NjfvUcq10MLAo/HgdcbmaHmFld\noD4wuyjvVy1FIiIiEkvOBnoBC81sfnjePUAPM2sEOLAW+BuAuy82sxRgCaEz124qyplnoKJIRERE\nchHExRvdfQYQ6arXE/LY5lHg0QPdt4oiERERiSgrTm8FVlQaUyQiIiKCWopEREQkF7r3mYiIiEgC\nUkuRiIiIRJRoY4pUFImIiEhE6j4TERERSUBx21JUKim+6rnMrKygIxRapItESHQl1t9gcjAbn/51\n0BEK5dDkMkFHiAuJ1n0WX5WFiIiISDGJ25YiERERKV4aUyQiIiKSgNRSJCIiIhEl2pgiFUUiIiIS\nkbrPRERERBKQWopEREQkIvf4u5zMgVBLkYiIiAhqKRIREZFcZCXYmCIVRSIiIhKRJ9jZZ+o+ExER\nEUEtRSIiIpKLROs+U0uRiIiICGopEhERkVwk2pgiFUUiIiISUaLd5kPdZyIiIiIkeFFUq1Z1Jk0a\nzfx5HzPv6yncfNPVey3vd1tfftu1nqOPPiqghHkbPGgAaakLmD/v46Cj5GnwoAFsSF3AvBw5jzrq\nSCZOGMmSxTOYOGEkRx55RIAJ9xYp7/33387aNXOZO2cyc+dMpmPH8wJMmL8O7VuxeNFnLFsyg/7/\nuCnoOPlauWIm876ewtw5k5n55YSg4xRIvB3jePm+yClejvHipdOZNXsiX8z8gM9mjAXgz6ecyMdT\n32HW7ImkvP0ahx1WIeCURePF8F8sS+iiKCMjk7vu+heNGrfhnJZduf76qzjhhPpAqGBq27Yl361L\nDThl7oYPT+HCTlcEHSNfw4an0GmfnP3738QnU2dw0skt+GTqDPr3j50vvEh5AQY+P5gmTdvTpGl7\nPvzwkwCSFUxSUhLPD3yUTp17ckrD1nTvfhEnnlg/6Fj5atvuMpo0bc+ZZ10QdJR8xeMxjpfviz3i\n7RhfcP5faX7mhbRs0RWAF196jAfvf5Izmp3P+HGT6Pf3vgEnlIJI6KIoPX0z8+cvAmDnzp9Ztmwl\nNWtWA+CpJx/kn/c8GtODzKbPmMX3P2wPOka+ZkTI2blzB0aMGAPAiBFj6NKlYxDRIoqUN540a9qY\nVavWsmbNOnbv3k1Kyli6dO4QdKyDSjwe43j5vtgjHo9xTvXq1WXGjFkAfPLxDLp2jZ3vuMJw96hP\nsSyhi6KcjjmmFg0bnczs2fPo3Kk9aWnpLFy4NOhYB62qVSqRnr4ZCBWnVatUCjhR/m68oQ9ff/UR\ngwcNiKnuvn3VqFmN9alp2c9TN2ykRo1qASbKn7szccJIZs2cyLXXxH5rRjwe43gTT8fY3Rk7fjjT\nPx9Hn6t7ALB06bd06twOgIv/cgE1a1UPMqIUkIoioHz5cowa+Sp33vkQGRkZ9O9/Mw8/MiDoWAkl\n1v96ePXV4Rx/QnNOb9KejembeerJB4KOdFA5t/XFNDujI5069+SGG3pzToszgo4kUmDt2l5Gi+ad\n+ctFfejbtxdnn92MG6/vz3XX9WL65+M47LDy/P777qBjFkkWHvUplgVSFJnZEWb2uJktM7PvzWyb\nmS0Nzzsyj+36mtlcM5ubmbkzKlmSk5MZPWoQo0a9x9ixH3LssXWoU6c2c+ZMYvnyL6hVszozZ06k\natXKUdmfhGzavJVq1aoAUK1aFTZv2RZworxt3ryVrKws3J3XX/8vTZo2CjpSrtI2pFO7Vo3s57Vq\nVictLT3ARPnbk2/Llm2MHTuRpjF8fCE+j3G8iadjvDFtExD6/I4fP4nTmzRkxYrVdO1yJeec3YUx\nKeNZs2ZdwCmLRt1nJSMF+AFo5e4V3f1ooHV4XkpuG7n7IHdv4u5NSpWKzkj+V199imXLvmXg84MB\nWLx4GbX/1Jjjj2/O8cc3J3XDRs4883w2bdoSlf1JyPvjJ9Or12UA9Op1GePHTwo4Ud72FHAAF3U9\nn8WLlweYJm9z5s6nXr261KlTm9KlS9OtW1fGvz856Fi5KleuLBUqlM9+3K7tuTF9fCH+jnE8ipdj\nvO/n97w257BkyXIqVz4aADOj/1038/pr/w0yphRQUBdvrOPuT+Sc4e7pwBNmdnUu20Rd8+ZN6XnF\npSxcuJTZsz4E4IEHnuDDSVNLKsIBeXPEi5zb8iwqVarI2tVzefiRpxkydFTQsfYzIkfONavn8sgj\nT/PkUy8y8q1X6NO7B+vWpdLjr9cHHTNbpLznntuchg1Pwt1Z+10qN954V9Axc5WZmclt/e5jwgdv\nUSopiaHDRrNkyYqgY+WqatXKvD3mdQCSk0sxatR7TJo8LdhQ+Yi3Ywzx832xR7wc4ypVKjFy1KtA\n6PObkjKOKR99xo039ua6v10JwLixHzJi+JggYxZZol280YJoyjKzycAUYJi7bwrPqwr0Btq5e9v8\nXuOQQ2vH1f+pzKysoCMUmgUdIAHE1YdY5CByaHKZoCMUyc5f1pToV3PFw+pH/Wvq+x3fxuyvl6C6\nz7oDRwOfhscUfQ9MAyoClwWUSURERHJItDFFgbQU5cXM+rj7kPzWU0tR8YvZUv4gElcfYpGDiFqK\nCuaICsdF/Wvqx52rYvbXSyyekv9w0AFEREQk8QQy0NrMvsltEVC1JLOIiIhIZLHWm1Tcgjr7rCrQ\ngdAp+DkZ8EXJxxEREZFEF1RR9D5Qwd3n77vAzKaVfBwRERHZV6Kdkh9IUeTu1+Sx7K8lmUVEREQi\n8wQ7HSQWB1qLiIiIlLigus9EREQkxiVa95laikRERERQS5GIiIjkItFOyVdLkYiIiAhqKRIREZFc\nJNrZZyqKREREJCJ1n4mIiIgEyMw6mtlyM1tpZneX1H7VUiQiIiIRBdFSZGalgBeBdkAqMMfMxrn7\nkuLet1qKREREJJY0A1a6+2p3/x0YBXQtiR2rKBIREZGIvBimAqgJrM/xPDU8r9jFbffZb7vWW3G9\ntpn1dfdBxfX60RZveSH+MsdbXlDmkhBveUGZS0K85c1Lxu8bov671sz6An1zzBoUK8dLLUWR9c1/\nlZgSb3kh/jLHW15Q5pIQb3lBmUtCvOUtUe4+yN2b5Jj2LYg2ALVzPK8VnlfsVBSJiIhILJkD1Dez\numZWBrgcGFcSO47b7jMRERE5+Lh7hpndDEwCSgFvuPvikti3iqLIYqJvsxDiLS/EX+Z4ywvKXBLi\nLS8oc0mIt7wxx90nABNKer+WaFerFBEREYlEY4pEREREUFGUzczeMLPNZrYo6CwFZWa1zWyqmS0x\ns8VmdlvQmfJiZoea2WwzWxDO+3DQmQrKzEqZ2Twzez/oLAVhZmvNbKGZzTezuUHnyY+ZHWlmb5vZ\nMjNbamZnBZ0pL2Z2fPjY7pl+MrN+QefKj5n9Pfxvb5GZjTSzQ4POlBczuy2cdXGsHt9IvzvMrKKZ\nfWRm34Z/HhVkRik4FUV/GAp0DDpEIWUAd7j7ScCZwE1mdlLAmfLyG3CeuzcEGgEdzezMgDMV1G3A\n0qBDFFJrd2/k7k2CDlIAA4EP3f0EoCExfqzdfXn42DYCTgd+Ad4NOFaezKwmcCvQxN3/TGgA6+XB\npsqdmf0ZuI7Q1Y0bAp3MrF6wqSIayv6/O+4GPnb3+sDH4ecSB1QUhbn7Z8D3QecoDHff6O5fhx/v\nIPSLpESu+lkUHrIz/LR0eIr5QW1mVgu4EHgt6CwHIzM7AmgJvA7g7r+7+/ZgUxVKG2CVu38XdJAC\nSAbKmlkyUA5ICzhPXk4EZrn7L+6eAXwK/CXgTPvJ5XdHV2BY+PEw4KISDSVFpqLoIGFmdYDGwKxg\nk+Qt3A01H9gMfOTuMZ037DmgP5AVdJBCcGCymX0VvnpsLKsLbAGGhLsoXzOz8kGHKoTLgZFBh8iP\nu28AngbWARuBH919crCp8rQIOMfMjjazcsAF7H1Bv1hW1d03hh+nA1WDDCMFp6LoIGBmFYB3gH7u\n/lPQefLi7pnhLodaQLNwE3nMMrNOwGZ3/yroLIXUwt1PA84n1K3aMuhAeUgGTgNedvfGwM/ESXdD\n+MJyXYAxQWfJT3hcS1dCRWgNoLyZ9Qw2Ve7cfSnwBDAZ+BCYD2QGGqoIPHSKd8y3iEuIiqI4Z2al\nCRVE/3X3/wWdp6DC3SNTif1xXGcDXcxsLaE7NZ9nZm8GGyl/4VYB3H0zobEuzYJNlKdUIDVHq+Hb\nhIqkeHA+8LW7bwo6SAG0Bda4+xZ33w38D2gecKY8ufvr7n66u7cEfgBWBJ2pgDaZWXWA8M/NAeeR\nAlJRFMfMzAiNw1jq7s8EnSc/ZlbZzI4MPy4LtAOWBZsqb+7+T3ev5e51CHWTfOLuMfvXNYCZlTez\nw/Y8BtoT6oqISe6eDqw3s+PDs9oASwKMVBg9iIOus7B1wJlmVi783dGGGB/QbmZVwj//RGg80VvB\nJiqwccBV4cdXAWMDzCKFoCtah5nZSKAVUMnMUoEH3f31YFPl62ygF7AwPE4H4J7wlUBjUXVgmJmV\nIlSQp7h7XJziHmeqAu+Gfu+RDLzl7h8GGylftwD/DXdHrQb6BJwnX+GCsx3wt6CzFIS7zzKzt4Gv\nCZ25Oo/Yv/LyO2Z2NLAbuCkWB+BH+t0BPA6kmNk1wHdAt+ASSmHoitYiIiIiqPtMREREBFBRJCIi\nIgKoKBIREREBVBSJiIiIACqKRERERAAVRSIHLTObFr7oZJ7zEpWZDTUznX4rItlUFIlIgZhZPzPr\nHXSO4mRmF5nZQ0HnEJFgqCgSSSztgePzXSuyfkDv6EWJSRcRuvieiCQgFUUiMWLPrTmKk7v/7u6/\nFfd+8lIS71NEpChUFIlEgZn1NjM3s7Zm9pCZfWdmv5nZN2Z2eYT114bH9zQ2s0lm9iPwTY7lh5jZ\nPWa22Mx2mdl2MxtvZo0jvNZRZjbYzLaa2c/h1z09l5wRxxSZWT0zG2JmqWb2u5mlmdnYPa8THntz\nDHBu+H3umerkcUzqhNd5yMy6m9lXZvYr8EKOdaqb2ctmti7HfgftuedVjvUqmtmzZrYqfDy2hV/v\nHznWaRXeX+8IWfIdP2Rm0wjfr2qf97jf64nIwUn3PhOJrieA8sBL4ed9gJFmdqi7D91n3T8BnwBj\ngHeACgBmVhr4kNAdzEcA/wccAVwHfG5mLd19bo51JwFNw+vOBBoBU4BtBQlsZk2Aj4HShG4wvAio\nCJwbzvAVoXvsPQtsBR7NsfmWAuziIuBW4GXgFeCn8H7/BHwJlAnvdxVQD7gBaG1mTdz9x/BrjAFa\nhrf/BigLnEjonlNPFeR9FsCjhP5QPIfQ+93jiyi9vojEOnfXpEnTAU6Exto4oZs/HpFj/hHhed8D\nZXPMXxte/9oIr/X38LIO+8w/nNCdzqflmNc3vO7D+6zbLzx/7T7zp+WcBxihImgXcGqELEn7ZJ4W\n6f3nckzqhDPsBk6MsHwssBmotc/8JoRuWPpQjmPowEv57K9VeL3eEZYNDX3dFX6eJk2aEmdS95lI\ndL3sf7RuEH78CnAUoV/aOX0PDInwGj2BZcBXZlZpz0SoReUjoIWZlQ2vexGQCQzYNwfhFpl8NAJO\nBoa4+zf7LnT3rAK8Rn4+cPelOWeY2RFAJ2AcsGuf97kWWEloUDjAr8BvwBl5ddeJiBwodZ+JRNfS\nCPOWhH8eu8/8Ve6eGWH9Ewl1D+XVNVUJWB9+zY3uvlcB5O6/mdlqQsVYXuqHf87LZ70DsSLCvOMJ\ndVVdE54iWQ2hweFm1g8YCKwxsyWEuh3fc/ePiyGviCQoFUUiwfkll/kGLARuz2PbgozliRWR3qeF\nf74JDMtlu1/3PHD3V8xsLHAhobFOlwI3m9lod98zkD2vgdT6rhORfOmLQiS6TiQ0Viank8I/Vxfw\nNb4FKgOfFKD7ajXQ3swOz9laZGaHEGpF+iGf7fe04jQqQK5oXv15Zfj1yrj7lIJs4O4bgdeA18ys\nFKGB5T3MbIC7zyHUHQmhQeL72reVLtfdFHA9ETkIaUyRSHTdEB4vA2SPnbke2A58WsDXGA5UI5eW\nIjOrmuPpWKAUcMe+OQgNzM7PAmAxcLWZnRxhX5bj6U4iFxyF5u7bgAnAX8zszEj7NbPK4cflzKzc\nPttn8sclDPZkWkNogHbbfV6rObDfPnKxM7xNVN6niMQXtRSJRNdWYJaZ7RlA3YfQqffXuntu3WX7\nGgi0A54ys/MIjZ/5Kfw6bQidKdY6vO4QQmegPWBmdQmd4t4YuIzQKe55/ht3dzezPoROyZ9tZntO\nyT+SUDfVh/xxXaGZwDVm9i9CY6eygPHu/nMB39e+bgBmAJ+Z2XBC45qSCLXqdCVUHD4ENAA+NbN3\nw9l+INQidwOhQmh6+L3sNLOhwLVmNpLQmXb1Cf0/+AZoWIBMM4GbgZfM7ANCZ87Ncvc1RXyPIhJH\nVBSJRNddhK5zcxNQlVD31BXu/lZBX8Ddd5vZhcCNhK6X83B4URowmxxjcMKDkNsRulbPRcAlwBxC\nRdXThE6Lz29/c8ysKXA/0I1Qy9bW8L4+z7HqvYRaZW4iVDQZUBcoUlHk7uvDF4e8i1AR1JNQwbce\nGA+khFddD7xBqBC8CDgE2AAMBp7Yp9j8ezjXxeHX/AroTKhwLEhRNJJQUXk5ocIyiVBRpaJIJAGY\nu7rQRQ5U+KrHQ4DW7j4t2DQiIlIUGlMkIiIigooiEREREUBFkYiIiAigMUUiIiIigFqKRERERAAV\nRSIiIiKAiiIRERERQEWRiIiICKCiSERERARQUSQiIiICwP8D+B0J+17zFCcAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 720x576 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Oh2m0x1exJku",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 359
        },
        "outputId": "413572d6-0981-46e3-83c7-a1a9d122fa63"
      },
      "source": [
        "from  sklearn.metrics import classification_report \n",
        "print('accuracy %s' % accuracy_score(y_pred, Y_validation_cat_seq))\n",
        "print(classification_report(Y_validation_cat_seq, y_pred,target_names=[str(w) for w in labels]))\n",
        "print(dict(list(label_word_index.items())))"
      ],
      "execution_count": 81,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "accuracy 0.8744723217841497\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           1       0.80      0.78      0.79      2000\n",
            "           2       0.89      0.89      0.89      2000\n",
            "           3       0.80      0.81      0.81      2000\n",
            "           4       0.86      0.90      0.88      2000\n",
            "           5       0.99      0.97      0.98      2000\n",
            "           6       0.87      0.91      0.89       798\n",
            "           7       0.93      0.93      0.93       770\n",
            "           8       0.87      0.81      0.84       465\n",
            "           9       1.00      1.00      1.00       407\n",
            "          10       0.67      0.51      0.58       115\n",
            "\n",
            "    accuracy                           0.87     12555\n",
            "   macro avg       0.87      0.85      0.86     12555\n",
            "weighted avg       0.87      0.87      0.87     12555\n",
            "\n",
            "{'平板': 1, '水果': 2, '洗发水': 3, '衣服': 4, '酒店': 5, '计算机': 6, '书籍': 7, '手机': 8, '蒙牛': 9, '热水器': 10}\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "1n8CqEMMBY4p",
        "colab_type": "text"
      },
      "source": [
        ""
      ]
    }
  ]
}